Index: .editorconfig
===================================================================
--- .editorconfig	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ .editorconfig	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -15,4 +15,4 @@
 indent_size = 2
 
-[compose.yaml]
+[docker-compose.yml]
 indent_size = 4
Index: .env.example
===================================================================
--- .env.example	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ .env.example	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -12,5 +12,5 @@
 # APP_MAINTENANCE_STORE=database
 
-# PHP_CLI_SERVER_WORKERS=4
+PHP_CLI_SERVER_WORKERS=4
 
 BCRYPT_ROUNDS=12
Index: .gitattributes
===================================================================
--- .gitattributes	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ .gitattributes	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -7,5 +7,4 @@
 *.php diff=php
 
-/.github export-ignore
 CHANGELOG.md export-ignore
-.styleci.yml export-ignore
+README.md export-ignore
Index: .github/workflows/lint.yml
===================================================================
--- .github/workflows/lint.yml	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ .github/workflows/lint.yml	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,45 @@
+name: linter
+
+on:
+  push:
+    branches:
+      - develop
+      - main
+  pull_request:
+    branches:
+      - develop
+      - main
+
+permissions:
+  contents: write
+
+jobs:
+  quality:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: '8.4'
+
+      - name: Install Dependencies
+        run: |
+          composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
+          npm install
+
+      - name: Run Pint
+        run: vendor/bin/pint
+
+      - name: Format Frontend
+        run: npm run format
+
+      - name: Lint Frontend
+        run: npm run lint
+
+      # - name: Commit Changes
+      #   uses: stefanzweifel/git-auto-commit-action@v5
+      #   with:
+      #     commit_message: fix code style
+      #     commit_options: '--no-verify'
Index: .github/workflows/tests.yml
===================================================================
--- .github/workflows/tests.yml	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ .github/workflows/tests.yml	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,50 @@
+name: tests
+
+on:
+  push:
+    branches:
+      - develop
+      - main
+  pull_request:
+    branches:
+      - develop
+      - main
+
+jobs:
+  ci:
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: 8.4
+          tools: composer:v2
+          coverage: xdebug
+
+      - name: Setup Node
+        uses: actions/setup-node@v4
+        with:
+          node-version: '22'
+          cache: 'npm'
+
+      - name: Install Node Dependencies
+        run: npm ci
+
+      - name: Build Assets
+        run: npm run build
+
+      - name: Install Dependencies
+        run: composer install --no-interaction --prefer-dist --optimize-autoloader
+
+      - name: Copy Environment File
+        run: cp .env.example .env
+
+      - name: Generate Application Key
+        run: php artisan key:generate
+
+      - name: Tests
+        run: ./vendor/bin/pest
Index: .gitignore
===================================================================
--- .gitignore	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ .gitignore	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,16 +1,4 @@
-*.log
-.DS_Store
-.env
-.env.backup
-.env.production
-.phpactor.json
-.phpunit.result.cache
-/.fleet
-/.idea
-/.nova
 /.phpunit.cache
-/.vscode
-/.zed
-/auth.json
+/bootstrap/ssr
 /node_modules
 /public/build
@@ -20,5 +8,17 @@
 /storage/pail
 /vendor
+.env
+.env.backup
+.env.production
+.phpactor.json
+.phpunit.result.cache
 Homestead.json
 Homestead.yaml
-Thumbs.db
+npm-debug.log
+yarn-error.log
+/auth.json
+/.fleet
+/.idea
+/.nova
+/.vscode
+/.zed
Index: .prettierignore
===================================================================
--- .prettierignore	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ .prettierignore	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,3 @@
+resources/js/components/ui/*
+resources/js/ziggy.js
+resources/views/mail/*
Index: .prettierrc
===================================================================
--- .prettierrc	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ .prettierrc	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,18 @@
+{
+    "semi": true,
+    "singleQuote": true,
+    "singleAttributePerLine": false,
+    "htmlWhitespaceSensitivity": "css",
+    "printWidth": 150,
+    "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"],
+    "tailwindFunctions": ["clsx", "cn"],
+    "tabWidth": 4,
+    "overrides": [
+        {
+            "files": "**/*.yml",
+            "options": {
+                "tabWidth": 2
+            }
+        }
+    ]
+}
Index: ADME.md
===================================================================
--- README.md	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,81 +1,0 @@
-# FINKI Roadmap
-
-## Опис
-**FINKI Roadmap** е веб апликација наменета како водич за студентите на Факултетот за информатички науки и компјутерско инженерство (ФИНКИ).  
-Проектот има за цел да обезбеди структуриран преглед на студиите, предметите и препорачаните технологии за академски и професионален развој.
-
-Апликацијата е изработена со **Laravel** како backend framework и **Tailwind CSS** за frontend стилови.
-
----
-
-## Користени технологии
-- Laravel (PHP)
-- Tailwind CSS
-- Blade Templates
-- MySQL / SQLite
-- Javascript
-- Vite
-
----
-
-## Предуслови
-Потребно е да бидат инсталирани:
-- PHP 8.x
-- Composer
-- Node.js и NPM
-- MySQL или SQLite
-- Git
-
----
-
-## Инсталација и стартување
-
-### 1. Клонирање на проектот
-`git clone https://github.com/DarkoVanevski/finki_roadmap.git`  
-`cd finki_roadmap`
-
----
-
-### 2. Инсталација на PHP зависности
-`composer install`
-
----
-
-### 3. Инсталација на frontend зависности
-`npm install`
-
----
-
-### 4. Конфигурација на околина
-Креирање на `.env` фајл:  
-`cp .env.example .env`
-
-Генерирање на апликациски клуч:  
-`php artisan key:generate`
-
-Подесете ги параметрите за базата на податоци во `.env`.
-
----
-
-### 5. Миграции и иницијализација на податоци
-`php artisan migrate`  
-`php artisan db:seed`
-
----
-
-### 6. Стартување на апликацијата
-Во еден терминал:  
-`npm run dev`
-
-Во друг терминал:  
-`php artisan serve`
-
-Апликацијата ќе биде достапна на:  
-`http://127.0.0.1:8000`
-
----
-
-## Автори
-**Darko**  
-**Hari** 
-
Index: p/Console/Commands/AssignSubjectsToPrograms.php
===================================================================
--- app/Console/Commands/AssignSubjectsToPrograms.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,121 +1,0 @@
-<?php
-
-namespace App\Console\Commands;
-
-use App\Models\StudyProgram;
-use App\Models\Subject;
-use Illuminate\Console\Command;
-use Illuminate\Support\Facades\DB;
-
-class AssignSubjectsToPrograms extends Command
-{
-    /**
-     * The name and signature of the console command.
-     *
-     * @var string
-     */
-    protected $signature = 'finki:assign-subjects-to-programs';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
-    protected $description = 'Assign subjects from majors.json to their corresponding study programs';
-
-    /**
-     * Execute the console command.
-     */
-    public function handle()
-    {
-        $this->info('Starting to assign subjects to study programs...');
-
-        // Read the majors.json file
-        $jsonPath = storage_path('finki_subjects/majors.json');
-        if (!file_exists($jsonPath)) {
-            $this->error("File not found: {$jsonPath}");
-            return 1;
-        }
-
-        $majorsData = json_decode(file_get_contents($jsonPath), true);
-        if (!$majorsData) {
-            $this->error("Failed to decode JSON");
-            return 1;
-        }
-
-        $assigned = 0;
-        $skipped = 0;
-        $notFound = 0;
-
-        // Process each major
-        foreach ($majorsData as $majorData) {
-            $majorName = $majorData['major'];
-
-            // Find matching study program
-            $program = StudyProgram::where('name_mk', $majorName)
-                ->orWhere('name_en', $majorName)
-                ->first();
-
-            if (!$program) {
-                $this->line(" Skipping: '$majorName' - not found in database");
-                $skipped++;
-                continue;
-            }
-
-            $this->line("\n Processing: {$program->name_mk}");
-
-            // Get all subjects for this major from the curriculum
-            $subjectNames = [];
-            foreach ($majorData['curriculum'] as $semester) {
-                if (isset($semester['subjects']) && is_array($semester['subjects'])) {
-                    foreach ($semester['subjects'] as $subject) {
-                        if (isset($subject['subject'])) {
-                            $subjectNames[] = [
-                                'name' => $subject['subject'],
-                                'mandatory' => $subject['mandatory'] ?? true,
-                            ];
-                        }
-                    }
-                }
-            }
-
-            // Attach subjects to program
-            $attachCount = 0;
-            $notFoundCount = 0;
-
-            foreach ($subjectNames as $subjectData) {
-                // Try to find subject by name (both Macedonian and English)
-                $subject = Subject::where('name_mk', $subjectData['name'])
-                    ->orWhere('name', $subjectData['name'])
-                    ->first();
-
-                if ($subject) {
-                    // Check if already attached
-                    $existing = DB::table('study_program_subject')
-                        ->where('study_program_id', $program->id)
-                        ->where('subject_id', $subject->id)
-                        ->first();
-
-                    if (!$existing) {
-                        $type = $subjectData['mandatory'] ? 'mandatory' : 'elective';
-                        $program->subjects()->attach($subject->id, ['type' => $type]);
-                        $attachCount++;
-                    }
-                } else {
-                    $notFoundCount++;
-                }
-            }
-
-            $this->line("  Assigned {$attachCount} subjects" . ($notFoundCount > 0 ? " ({$notFoundCount} not found)" : ""));
-            $assigned += $attachCount;
-            $notFound += $notFoundCount;
-        }
-
-        $this->info("\n Assignment complete!");
-        $this->info("Total subjects assigned: {$assigned}");
-        $this->info("Total subjects not found: {$notFound}");
-        $this->info("Total majors skipped: {$skipped}");
-
-        return 0;
-    }
-}
Index: p/Console/Commands/ImportCurriculumData.php
===================================================================
--- app/Console/Commands/ImportCurriculumData.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,217 +1,0 @@
-<?php
-
-namespace App\Console\Commands;
-
-use App\Models\Subject;
-use App\Models\StudyProgram;
-use Illuminate\Console\Command;
-use Illuminate\Support\Facades\DB;
-
-class ImportCurriculumData extends Command
-{
-    /**
-     * The name and signature of the console command.
-     *
-     * @var string
-     */
-    protected $signature = 'app:import-curriculum-data';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
-    protected $description = 'Import curriculum data from JSON files including prerequisites';
-
-    /**
-     * Execute the console command.
-     */
-    public function handle()
-    {
-        $this->info('Starting curriculum data import...');
-
-        try {
-            // Import hand-fixed subjects with prerequisites
-            $this->importSubjectsWithPrerequisites();
-
-            $this->info('Curriculum data imported successfully!');
-        } catch (\Exception $e) {
-            $this->error('Error: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Import subjects from hand_fixed_subjects.json with prerequisites
-     */
-    private function importSubjectsWithPrerequisites()
-    {
-        $jsonPath = storage_path('finki_subjects/hand_fixed_subjects.json');
-
-        if (!file_exists($jsonPath)) {
-            $this->warn("File not found: $jsonPath");
-            return;
-        }
-
-        $json = json_decode(file_get_contents($jsonPath), true);
-
-        if (!is_array($json)) {
-            $this->error('Invalid JSON format');
-            return;
-        }
-
-        $importedCount = 0;
-        $updatedCount = 0;
-        $prerequisiteCount = 0;
-
-        foreach ($json as $item) {
-            try {
-                $code = $item['code'] ?? null;
-                $name = $item['name'] ?? null;
-                $level = $item['level'] ?? null;
-                $semester = $item['semester'] ?? null;
-                $prerequisites = $item['prerequisites'] ?? [];
-
-                if (!$code || !$name || !$level) {
-                    continue;
-                }
-
-                // Determine year from level
-                $year = $this->mapLevelToYear($level);
-
-                // Determine semester type
-                $semesterType = $this->mapSemesterName($semester);
-
-                // Check if subject exists
-                $subject = Subject::where('code', $code)->first();
-
-                if ($subject) {
-                    // Update existing subject with more detailed info
-                    $subject->update([
-                        'name' => $name,
-                        'name_mk' => $name,
-                        'year' => $year,
-                        'semester_type' => $semesterType,
-                    ]);
-                    $updatedCount++;
-                } else {
-                    // Create new subject
-                    $subject = Subject::create([
-                        'code' => $code,
-                        'name' => $name,
-                        'name_mk' => $name,
-                        'year' => $year,
-                        'semester_type' => $semesterType,
-                        'subject_type' => 'mandatory',
-                        'credits' => 6,
-                        'description' => null,
-                        'description_mk' => null,
-                    ]);
-                    $importedCount++;
-                }
-
-                // Process prerequisites
-                if (!empty($prerequisites) && is_array($prerequisites)) {
-                    $this->attachPrerequisites($subject, $prerequisites);
-                    $prerequisiteCount++;
-                }
-
-            } catch (\Exception $e) {
-                $this->warn("Skipped: " . ($item['name'] ?? 'Unknown') . " - " . $e->getMessage());
-            }
-        }
-
-        $this->line("Imported: {$importedCount} new subjects");
-        $this->line("Updated: {$updatedCount} subjects");
-        $this->line("Processed: {$prerequisiteCount} subjects with prerequisites");
-    }
-
-    /**
-     * Attach prerequisites to a subject
-     */
-    private function attachPrerequisites($subject, $prerequisites)
-    {
-        // Prerequisites are array of arrays
-        // Each inner array is a group of OR conditions
-        foreach ($prerequisites as $prereqGroup) {
-            if (!is_array($prereqGroup)) {
-                $prereqGroup = [$prereqGroup];
-            }
-
-            foreach ($prereqGroup as $prereqName) {
-                // Find prerequisite subject by name (fuzzy match)
-                $prereqSubject = $this->findSubjectByName($prereqName);
-
-                if ($prereqSubject && $prereqSubject->id !== $subject->id) {
-                    try {
-                        // Check if not already attached before attaching
-                        if (!$subject->prerequisites()->where('prerequisite_subject_id', $prereqSubject->id)->exists()) {
-                            $subject->prerequisites()->attach($prereqSubject->id);
-                        }
-                    } catch (\Exception $e) {
-                        // Silently skip duplicate attachments
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Find subject by name (fuzzy match)
-     */
-    private function findSubjectByName($name)
-    {
-        // First try exact match with name or name_mk
-        $subject = Subject::where('name', $name)
-            ->orWhere('name_mk', $name)
-            ->first();
-
-        if ($subject) {
-            return $subject;
-        }
-
-        // Try partial match (case-insensitive)
-        $name_lower = strtolower($name);
-        $subject = Subject::whereRaw("LOWER(name) LIKE ?", ["%$name_lower%"])
-            ->orWhereRaw("LOWER(name_mk) LIKE ?", ["%$name_lower%"])
-            ->first();
-
-        return $subject;
-    }
-
-    /**
-     * Map level (1,2,3,4) to year
-     */
-    private function mapLevelToYear($level)
-    {
-        $map = [
-            1 => 1,
-            2 => 2,
-            3 => 3,
-            4 => 4,
-            5 => 4, // Sometimes 5 is used for 4-year programs (lol)
-        ];
-
-        return $map[$level] ?? 1;
-    }
-
-    /**
-     * Map semester name to semester_type (winter/summer)
-     */
-    private function mapSemesterName($semester)
-    {
-        if (!$semester) {
-            return 'winter';
-        }
-
-        $semester_lower = strtolower($semester);
-
-        if (stripos($semester_lower, 'зимски') !== false || stripos($semester_lower, 'winter') !== false) {
-            return 'winter';
-        } elseif (stripos($semester_lower, 'летен') !== false || stripos($semester_lower, 'summer') !== false) {
-            return 'summer';
-        }
-
-        return 'winter'; // Default
-    }
-}
-
Index: p/Console/Commands/ScrapeFinki.php
===================================================================
--- app/Console/Commands/ScrapeFinki.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,343 +1,0 @@
-<?php
-
-namespace App\Console\Commands;
-
-use App\Models\Subject;
-use App\Models\StudyProgram;
-use Illuminate\Console\Command;
-use Symfony\Component\DomCrawler\Crawler;
-use GuzzleHttp\Client;
-
-class ScrapeFinki extends Command
-{
-    /**
-     * The name and signature of the console command.
-     *
-     * @var string
-     */
-    protected $signature = 'app:scrape-finki';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
-    protected $description = 'Scrape FINKI study programs and subjects from the official website';
-
-    private $client;
-    private $baseUrl = 'https://www.finki.ukim.mk';
-
-    /**
-     * Execute the console command.
-     */
-    public function handle()
-    {
-        $this->client = new Client(['verify' => false]);
-
-        try {
-            $this->info('Starting FINKI scraper...');
-
-            // Scrape study programs list
-            $programs = $this->scrapeStudyPrograms();
-
-            $this->info("Found " . count($programs) . " study programs");
-
-            foreach ($programs as $program) {
-                $this->info("Processing: {$program['name_mk']}");
-                $this->scrapeSubjectsForProgram($program);
-            }
-
-            $this->info('Scraping completed successfully!');
-        } catch (\Exception $e) {
-            $this->error('Error: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Scrape study programs from the main page
-     */
-    private function scrapeStudyPrograms()
-    {
-        $url = $this->baseUrl . '/mk/dodiplomski-studii';
-
-        try {
-            $response = $this->client->get($url);
-            $html = $response->getBody()->getContents();
-
-            // Use regex to extract program links instead of DOM parsing
-            $programs = [];
-            $seen = [];
-
-            // First, find all program links with their complete content
-            preg_match_all('/<a\s+href="\/program\/([A-Z0-9_]+)\/(?:mk|en)"[^>]*>[\s\S]{0,500}<\/a>/', $html, $matches, PREG_SET_ORDER);
-
-            foreach ($matches as $match) {
-                $code = $match[1];
-                $fullContent = $match[0];
-
-                // Only process Macedonian versions to avoid duplicates
-                if (stripos($fullContent, '/mk') === false) {
-                    continue;
-                }
-
-                // Extract program name from the span
-                if (preg_match('/<span>([^<]+)<\/span>/', $fullContent, $nameMatch)) {
-                    $name = trim($nameMatch[1]);
-                } else {
-                    continue;
-                }
-
-                // Extract duration from the span within parentheses
-                // Pattern: (<span>NUMBER</span> ANYTHING) - matches both години and years
-                if (preg_match('/\(<span>(\d+)<\/span>[^)]*\)/', $fullContent, $durationMatch)) {
-                    $duration = (int)$durationMatch[1];
-                } else {
-                    continue;
-                }
-
-                if ($code && $name && $duration > 0) {
-                    // Create unique identifier combining code and duration
-                    $uniqueKey = $code . '-' . $duration . 'Y';
-
-                    // Only add if this combination hasn't been seen before
-                    if (!isset($seen[$uniqueKey])) {
-                        $programs[] = [
-                            'code' => $code,
-                            'name_mk' => $name,
-                            'url' => '/program/' . $code . '/mk',
-                            'duration_years' => $duration,
-                        ];
-                        $seen[$uniqueKey] = true;
-                    }
-                }
-            }
-
-            return $programs;
-
-        } catch (\Exception $e) {
-            $this->error("Failed to scrape programs: " . $e->getMessage());
-            return [];
-        }
-    }
-
-    /**
-     * Scrape subjects for a specific program
-     */
-    private function scrapeSubjectsForProgram($program)
-    {
-        $url = $this->baseUrl . $program['url'];
-
-        try {
-            $this->info("  Fetching subjects for {$program['duration_years']}-year program...");
-            $response = $this->client->get($url);
-            $html = $response->getBody()->getContents();
-            $crawler = new Crawler($html);
-
-            $semesterCounter = 0;
-
-            // Find all tables with class "table-striped"
-            $tables = $crawler->filter('table.table-striped');
-
-            if ($tables->count() === 0) {
-                $this->warn("No subject tables found");
-                return;
-            }
-
-            // First, ensure the study program exists in the database
-            $studyProgram = $this->createOrUpdateStudyProgram($program);
-
-            // Process each table
-            $tables->each(function (Crawler $table) use (&$semesterCounter, $program, $studyProgram) {
-                $semesterCounter++;
-
-                // Determine year and semester type
-                $year = ceil($semesterCounter / 2);
-                $semesterType = $semesterCounter % 2 == 1 ? 'winter' : 'summer';
-
-                // Extract subjects from table rows
-                $this->scrapeSubjectsFromTable($table, $year, $semesterType, $program, $studyProgram);
-            });
-
-            $this->info("Processed {$semesterCounter} semesters");
-
-        } catch (\Exception $e) {
-            $this->warn("Error: " . $e->getMessage());
-        }
-    }
-
-    /**
-     * Create or update study program in database
-     */
-    private function createOrUpdateStudyProgram($program)
-    {
-        // Create a unique code for this program variant based on duration
-        $programCode = $program['code'] . '-' . $program['duration_years'] . 'Y';
-
-        // Try to find existing study program
-        $studyProgram = StudyProgram::where('code', $programCode)->first();
-
-        if (!$studyProgram) {
-            // Determine cycle based on duration
-            $cycle = 'first'; // Default to first cycle
-            if ($program['duration_years'] == 2) {
-                $cycle = 'first'; // Professional 2-year
-            }
-
-            try {
-                $studyProgram = StudyProgram::create([
-                    'code' => $programCode,
-                    'name_mk' => $program['name_mk'],
-                    'name_en' => $program['name_mk'], // Will be overwritten if we fetch English name
-                    'duration_years' => $program['duration_years'],
-                    'cycle' => $cycle,
-                ]);
-                $this->line("Created study program: {$programCode}");
-            } catch (\Exception $e) {
-                $this->warn("Failed to create study program {$programCode}: " . $e->getMessage());
-                return null;
-            }
-        }
-
-        return $studyProgram;
-    }
-
-    /**
-     * Extract subjects from a semester table
-     */
-    private function scrapeSubjectsFromTable($table, $year, $semesterType, $program, $studyProgram = null)
-    {
-        $currentType = 'mandatory';
-        $subjectCount = 0;
-
-        // Get all rows - try tbody first, then fall back to direct tr
-        $rows = $table->filter('tbody tr');
-        if ($rows->count() === 0) {
-            $rows = $table->filter('tr');
-        }
-
-        $rows->each(function (Crawler $row) use (&$currentType, &$subjectCount, $year, $semesterType, $program, $studyProgram) {
-            try {
-                $cells = $row->filter('td');
-                $rowText = trim($row->text());
-
-                // Skip empty rows
-                if (empty($rowText)) {
-                    return;
-                }
-
-                // Check if this is a type header row (contains h4 or colspan indicating a section)
-                $h4 = $row->filter('h4');
-                if ($h4->count() > 0) {
-                    $headerText = $h4->text();
-                    if (stripos($headerText, 'избран') !== false || stripos($headerText, 'elective') !== false) {
-                        $currentType = 'elective';
-                    } else {
-                        $currentType = 'mandatory';
-                    }
-                    return; // Skip the header row itself
-                }
-
-                // Check if row has th (header row)
-                $th = $row->filter('th');
-                if ($th->count() > 0) {
-                    return; // Skip header rows
-                }
-
-                // Check if row has colspan (also a header)
-                if ($cells->count() > 0 && $cells->eq(0)->attr('colspan')) {
-                    return;
-                }
-
-                // Process normal data rows
-                if ($cells->count() >= 2) {
-                    $codeCell = trim($cells->eq(0)->text());
-                    $nameCell = trim($cells->eq(1)->text());
-
-                    // Validate code format (should be like F23L1W004)
-                    if (preg_match('/^[A-Z]\d{2}[A-Z]\d[A-Z]\d{3}$/', $codeCell) && !empty($nameCell)) {
-                        $this->createOrUpdateSubject($codeCell, $nameCell, $year, $semesterType, $currentType, $program, $studyProgram);
-                        $subjectCount++;
-                    }
-                }
-            } catch (\Exception $e) {
-                // Skip problematic rows
-            }
-        });
-
-        if ($subjectCount > 0) {
-            $this->line("    Found {$subjectCount} subjects");
-        }
-    }
-
-    /**
-     * Create or update subject in database
-     */
-    private function createOrUpdateSubject($code, $name, $year, $semesterType, $subjectType, $program, $studyProgram = null)
-    {
-        // Check if subject already exists
-        $subject = Subject::where('code', $code)->first();
-
-        if ($subject) {
-            // If study program is provided, attach subject to it if not already attached
-            if ($studyProgram && !$subject->studyPrograms()->where('study_program_id', $studyProgram->id)->exists()) {
-                $subject->studyPrograms()->attach($studyProgram->id);
-            }
-            return;
-        }
-
-        try {
-            $subject = Subject::create([
-                'code' => $code,
-                'name' => $name,
-                'name_mk' => $name,
-                'year' => $year,
-                'semester_type' => $semesterType,
-                'subject_type' => $subjectType,
-                'credits' => 6, // Default credits
-                'description' => null,
-                'description_mk' => null,
-            ]);
-
-            // Attach to study program if provided
-            if ($studyProgram) {
-                $subject->studyPrograms()->attach($studyProgram->id);
-            }
-
-            $this->line("Created: {$code} - {$name} ({$subjectType})");
-
-        } catch (\Exception $e) {
-            $this->warn("Failed to create subject {$code}: " . $e->getMessage());
-        }
-    }
-
-    /**
-     * Fetch additional subject details from its dedicated page
-     */
-    private function enrichSubjectData($subject)
-    {
-        try {
-            $url = $this->baseUrl . '/subject/' . $subject->code;
-            $response = $this->client->get($url);
-            $crawler = new Crawler($response->getBody()->getContents());
-
-            // Try to extract ECTS
-            $ectsText = $crawler->filter('*')->each(function (Crawler $node) {
-                $text = $node->text();
-                if (stripos($text, 'ects') !== false || stripos($text, 'кредити') !== false) {
-                    return $text;
-                }
-            });
-
-            if (!empty($ectsText)) {
-                preg_match('/(\d+)\s*(ects|кредити)/i', implode(' ', $ectsText), $matches);
-                if (isset($matches[1])) {
-                    $subject->credits = (int)$matches[1];
-                    $subject->save();
-                }
-            }
-
-        } catch (\Exception $e) {
-            // do fuckall
-        }
-    }
-}
Index: app/Http/Controllers/Auth/AuthenticatedSessionController.php
===================================================================
--- app/Http/Controllers/Auth/AuthenticatedSessionController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/AuthenticatedSessionController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -8,14 +8,19 @@
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
-use Illuminate\View\View;
+use Illuminate\Support\Facades\Route;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class AuthenticatedSessionController extends Controller
 {
     /**
-     * Display the login view.
+     * Show the login page.
      */
-    public function create(): View
+    public function create(Request $request): Response
     {
-        return view('auth.login');
+        return Inertia::render('auth/login', [
+            'canResetPassword' => Route::has('password.request'),
+            'status' => $request->session()->get('status'),
+        ]);
     }
 
@@ -40,5 +45,4 @@
 
         $request->session()->invalidate();
-
         $request->session()->regenerateToken();
 
Index: app/Http/Controllers/Auth/ConfirmablePasswordController.php
===================================================================
--- app/Http/Controllers/Auth/ConfirmablePasswordController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/ConfirmablePasswordController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -8,14 +8,15 @@
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Validation\ValidationException;
-use Illuminate\View\View;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class ConfirmablePasswordController extends Controller
 {
     /**
-     * Show the confirm password view.
+     * Show the confirm password page.
      */
-    public function show(): View
+    public function show(): Response
     {
-        return view('auth.confirm-password');
+        return Inertia::render('auth/confirm-password');
     }
 
Index: app/Http/Controllers/Auth/EmailVerificationPromptController.php
===================================================================
--- app/Http/Controllers/Auth/EmailVerificationPromptController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/EmailVerificationPromptController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -6,16 +6,17 @@
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
-use Illuminate\View\View;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class EmailVerificationPromptController extends Controller
 {
     /**
-     * Display the email verification prompt.
+     * Show the email verification prompt page.
      */
-    public function __invoke(Request $request): RedirectResponse|View
+    public function __invoke(Request $request): Response|RedirectResponse
     {
         return $request->user()->hasVerifiedEmail()
                     ? redirect()->intended(route('dashboard', absolute: false))
-                    : view('auth.verify-email');
+                    : Inertia::render('auth/verify-email', ['status' => $request->session()->get('status')]);
     }
 }
Index: app/Http/Controllers/Auth/NewPasswordController.php
===================================================================
--- app/Http/Controllers/Auth/NewPasswordController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/NewPasswordController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -4,5 +4,4 @@
 
 use App\Http\Controllers\Controller;
-use App\Models\User;
 use Illuminate\Auth\Events\PasswordReset;
 use Illuminate\Http\RedirectResponse;
@@ -12,14 +11,19 @@
 use Illuminate\Support\Str;
 use Illuminate\Validation\Rules;
-use Illuminate\View\View;
+use Illuminate\Validation\ValidationException;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class NewPasswordController extends Controller
 {
     /**
-     * Display the password reset view.
+     * Show the password reset page.
      */
-    public function create(Request $request): View
+    public function create(Request $request): Response
     {
-        return view('auth.reset-password', ['request' => $request]);
+        return Inertia::render('auth/reset-password', [
+            'email' => $request->email,
+            'token' => $request->route('token'),
+        ]);
     }
 
@@ -32,6 +36,6 @@
     {
         $request->validate([
-            'token' => ['required'],
-            'email' => ['required', 'email'],
+            'token' => 'required',
+            'email' => 'required|email',
             'password' => ['required', 'confirmed', Rules\Password::defaults()],
         ]);
@@ -42,5 +46,5 @@
         $status = Password::reset(
             $request->only('email', 'password', 'password_confirmation', 'token'),
-            function (User $user) use ($request) {
+            function ($user) use ($request) {
                 $user->forceFill([
                     'password' => Hash::make($request->password),
@@ -55,8 +59,11 @@
         // the application's home authenticated view. If there is an error we can
         // redirect them back to where they came from with their error message.
-        return $status == Password::PASSWORD_RESET
-                    ? redirect()->route('login')->with('status', __($status))
-                    : back()->withInput($request->only('email'))
-                        ->withErrors(['email' => __($status)]);
+        if ($status == Password::PasswordReset) {
+            return to_route('login')->with('status', __($status));
+        }
+
+        throw ValidationException::withMessages([
+            'email' => [__($status)],
+        ]);
     }
 }
Index: p/Http/Controllers/Auth/PasswordController.php
===================================================================
--- app/Http/Controllers/Auth/PasswordController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<?php
-
-namespace App\Http\Controllers\Auth;
-
-use App\Http\Controllers\Controller;
-use Illuminate\Http\RedirectResponse;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Hash;
-use Illuminate\Validation\Rules\Password;
-
-class PasswordController extends Controller
-{
-    /**
-     * Update the user's password.
-     */
-    public function update(Request $request): RedirectResponse
-    {
-        $validated = $request->validateWithBag('updatePassword', [
-            'current_password' => ['required', 'current_password'],
-            'password' => ['required', Password::defaults(), 'confirmed'],
-        ]);
-
-        $request->user()->update([
-            'password' => Hash::make($validated['password']),
-        ]);
-
-        return back()->with('status', 'password-updated');
-    }
-}
Index: app/Http/Controllers/Auth/PasswordResetLinkController.php
===================================================================
--- app/Http/Controllers/Auth/PasswordResetLinkController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/PasswordResetLinkController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -7,14 +7,17 @@
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Password;
-use Illuminate\View\View;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class PasswordResetLinkController extends Controller
 {
     /**
-     * Display the password reset link request view.
+     * Show the password reset link request page.
      */
-    public function create(): View
+    public function create(Request $request): Response
     {
-        return view('auth.forgot-password');
+        return Inertia::render('auth/forgot-password', [
+            'status' => $request->session()->get('status'),
+        ]);
     }
 
@@ -27,18 +30,12 @@
     {
         $request->validate([
-            'email' => ['required', 'email'],
+            'email' => 'required|email',
         ]);
 
-        // We will send the password reset link to this user. Once we have attempted
-        // to send the link, we will examine the response then see the message we
-        // need to show to the user. Finally, we'll send out a proper response.
-        $status = Password::sendResetLink(
+        Password::sendResetLink(
             $request->only('email')
         );
 
-        return $status == Password::RESET_LINK_SENT
-                    ? back()->with('status', __($status))
-                    : back()->withInput($request->only('email'))
-                        ->withErrors(['email' => __($status)]);
+        return back()->with('status', __('A reset link will be sent if the account exists.'));
     }
 }
Index: app/Http/Controllers/Auth/RegisteredUserController.php
===================================================================
--- app/Http/Controllers/Auth/RegisteredUserController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/RegisteredUserController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -11,14 +11,15 @@
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Validation\Rules;
-use Illuminate\View\View;
+use Inertia\Inertia;
+use Inertia\Response;
 
 class RegisteredUserController extends Controller
 {
     /**
-     * Display the registration view.
+     * Show the registration page.
      */
-    public function create(): View
+    public function create(): Response
     {
-        return view('auth.register');
+        return Inertia::render('auth/register');
     }
 
@@ -31,6 +32,6 @@
     {
         $request->validate([
-            'name' => ['required', 'string', 'max:255'],
-            'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
+            'name' => 'required|string|max:255',
+            'email' => 'required|string|lowercase|email|max:255|unique:'.User::class,
             'password' => ['required', 'confirmed', Rules\Password::defaults()],
         ]);
@@ -40,5 +41,4 @@
             'email' => $request->email,
             'password' => Hash::make($request->password),
-            'role' => 'student',
         ]);
 
@@ -47,5 +47,5 @@
         Auth::login($user);
 
-        return redirect(route('dashboard', absolute: false));
+        return to_route('dashboard');
     }
 }
Index: app/Http/Controllers/Auth/VerifyEmailController.php
===================================================================
--- app/Http/Controllers/Auth/VerifyEmailController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Controllers/Auth/VerifyEmailController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -20,5 +20,8 @@
 
         if ($request->user()->markEmailAsVerified()) {
-            event(new Verified($request->user()));
+            /** @var \Illuminate\Contracts\Auth\MustVerifyEmail $user */
+            $user = $request->user();
+
+            event(new Verified($user));
         }
 
Index: p/Http/Controllers/ProfileController.php
===================================================================
--- app/Http/Controllers/ProfileController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,60 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Http\Requests\ProfileUpdateRequest;
-use Illuminate\Http\RedirectResponse;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Redirect;
-use Illuminate\View\View;
-
-class ProfileController extends Controller
-{
-    /**
-     * Display the user's profile form.
-     */
-    public function edit(Request $request): View
-    {
-        return view('profile.edit', [
-            'user' => $request->user(),
-        ]);
-    }
-
-    /**
-     * 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')->with('status', 'profile-updated');
-    }
-
-    /**
-     * Delete the user's account.
-     */
-    public function destroy(Request $request): RedirectResponse
-    {
-        $request->validateWithBag('userDeletion', [
-            'password' => ['required', 'current_password'],
-        ]);
-
-        $user = $request->user();
-
-        Auth::logout();
-
-        $user->delete();
-
-        $request->session()->invalidate();
-        $request->session()->regenerateToken();
-
-        return Redirect::to('/');
-    }
-}
Index: p/Http/Controllers/RoadmapController.php
===================================================================
--- app/Http/Controllers/RoadmapController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,450 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Models\CareerPath;
-use App\Models\Roadmap;
-use App\Models\StudyProgram;
-use App\Models\Subject;
-use App\Models\UserProgress;
-use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
-use Illuminate\Http\Request;
-use Illuminate\View\View;
-
-class RoadmapController extends Controller
-{
-    use AuthorizesRequests;
-    /**
-     * Show the roadmap form where user inputs completed, current, and desired study program
-     */
-    public function create(): View
-    {
-        $studyPrograms = StudyProgram::all();
-        $careerPaths = CareerPath::all();
-        // Don't fetch subjects here - they'll be loaded dynamically via AJAX
-
-        return view('roadmap.create', [
-            'studyPrograms' => $studyPrograms,
-            'careerPaths' => $careerPaths,
-            'subjects' => [], // Empty initially, will be populated by JavaScript
-        ]);
-    }
-
-    /**
-     * Get subjects for a specific study program via AJAX
-     */
-    public function getSubjectsByProgram($programId)
-    {
-        $program = StudyProgram::findOrFail($programId);
-        $subjects = $program->subjects()
-            ->orderBy('year')
-            ->orderBy('semester_type')
-            ->get()
-            ->filter(function ($subject) use ($program) {
-                // Only include subjects within the program's duration
-                return $subject->year <= $program->duration_years;
-            })
-            ->map(function ($subject) {
-                return [
-                    'id' => $subject->id,
-                    'code' => $subject->code,
-                    'name' => $subject->name,
-                    'name_mk' => $subject->name_mk,
-                    'year' => $subject->year,
-                    'semester_type' => $subject->getSemesterTypeFromCode(), // Use code-derived type
-                    'subject_type' => $subject->pivot->type ?? 'mandatory', // Get type from pivot
-                    'credits' => $subject->credits,
-                ];
-            });
-
-        return response()->json($subjects);
-    }
-
-    /**
-     * Generate and display the recommended roadmap
-     */
-    public function store(Request $request)
-    {
-        $validated = $request->validate([
-            'study_program_id' => 'required|exists:study_programs,id',
-            'career_path_id' => 'nullable|exists:career_paths,id',
-            'completed_subjects' => 'array',
-            'completed_subjects.*' => 'exists:subjects,id',
-            'in_progress_subjects' => 'array',
-            'in_progress_subjects.*' => 'exists:subjects,id',
-        ]);
-
-        $studyProgram = StudyProgram::with('subjects')->findOrFail($validated['study_program_id']);
-        $careerPath = $validated['career_path_id'] ? CareerPath::findOrFail($validated['career_path_id']) : null;
-        $completedIds = $validated['completed_subjects'] ?? [];
-        $inProgressIds = $validated['in_progress_subjects'] ?? [];
-
-        $user = auth()->user();
-
-        // Clear existing progress for this study program
-        UserProgress::where('user_id', $user->id)
-            ->where('study_program_id', $studyProgram->id)
-            ->delete();
-
-        // Save completed subjects
-        foreach ($completedIds as $subjectId) {
-            UserProgress::create([
-                'user_id' => $user->id,
-                'subject_id' => $subjectId,
-                'study_program_id' => $studyProgram->id,
-                'career_path_id' => $careerPath?->id,
-                'status' => 'completed',
-                'completed_at' => now(),
-            ]);
-        }
-
-        // Save in-progress subjects
-        foreach ($inProgressIds as $subjectId) {
-            UserProgress::create([
-                'user_id' => $user->id,
-                'subject_id' => $subjectId,
-                'study_program_id' => $studyProgram->id,
-                'career_path_id' => $careerPath?->id,
-                'status' => 'in_progress',
-            ]);
-        }
-
-        // Generate roadmap
-        $roadmap = $this->generateRoadmap($user->id, $studyProgram, $completedIds, $inProgressIds, $careerPath);
-        $semesterRoadmap = $this->generateSemesterRoadmap($studyProgram, $completedIds, $inProgressIds, $careerPath);
-
-        // Save the generated roadmap to database
-        $roadmapData = $this->serializeRoadmapData($roadmap);
-        $semesterRoadmapData = $this->serializeSemesterRoadmapData($semesterRoadmap);
-
-        Roadmap::updateOrCreate(
-            [
-                'user_id' => $user->id,
-                'study_program_id' => $studyProgram->id,
-            ],
-            [
-                'career_path_id' => $careerPath?->id,
-                'roadmap_data' => $roadmapData,
-                'semester_roadmap_data' => $semesterRoadmapData,
-            ]
-        );
-
-        return view('roadmap.show', [
-            'studyProgram' => $studyProgram,
-            'careerPath' => $careerPath,
-            'roadmap' => $roadmap,
-            'semesterRoadmap' => $semesterRoadmap,
-            'completed' => collect($completedIds),
-            'inProgress' => collect($inProgressIds),
-        ]);
-    }
-
-    /**
-     * Generate recommended roadmap based on user progress and prerequisites
-     */
-    private function generateRoadmap($userId, StudyProgram $studyProgram, array $completedIds, array $inProgressIds, $careerPath = null)
-    {
-        $allSubjects = $studyProgram->subjects()->get();
-        $remaining = [];
-
-        // Get subject IDs for career path if one is selected
-        $careerPathSubjectIds = $careerPath ? $careerPath->subjects()->pluck('subjects.id')->toArray() : [];
-
-        foreach ($allSubjects as $subject) {
-            // Skip subjects from years beyond the program duration
-            if ($subject->year > $studyProgram->duration_years) {
-                continue;
-            }
-
-            if (!in_array($subject->id, $completedIds) && !in_array($subject->id, $inProgressIds)) {
-                // If career path is selected, filter to show:
-                // 1. Mandatory subjects (always show)
-                // 2. Electives related to the career path
-                if ($careerPath) {
-                    $isElective = ($subject->pivot->type ?? 'mandatory') === 'elective';
-                    $isInCareerPath = in_array($subject->id, $careerPathSubjectIds);
-
-                    // Skip electives not in the career path
-                    if ($isElective && !$isInCareerPath) {
-                        continue;
-                    }
-                }
-
-                // Check if prerequisites are met
-                $prerequisites = $subject->prerequisites()->get();
-                $prerequisitesMet = true;
-
-                if ($prerequisites->isNotEmpty()) {
-                    foreach ($prerequisites as $prerequisite) {
-                        // Check if prerequisite is completed
-                        $completed = in_array($prerequisite->id, $completedIds);
-                        if (!$completed) {
-                            $prerequisitesMet = false;
-                            break;
-                        }
-                    }
-                }
-
-                $remaining[] = [
-                    'subject' => $subject,
-                    'prerequisites' => $prerequisites,
-                    'ready' => $prerequisitesMet,
-                    'year' => $subject->year,
-                    'type' => $subject->pivot->type ?? 'mandatory',
-                    'inCareerPath' => $careerPath && in_array($subject->id, $careerPathSubjectIds),
-                ];
-            }
-        }
-
-        // Sort by: ready first, then by year, then by semester type
-        usort($remaining, function ($a, $b) {
-            if ($a['ready'] !== $b['ready']) {
-                return $a['ready'] ? -1 : 1;
-            }
-            if ($a['year'] !== $b['year']) {
-                return $a['year'] <=> $b['year'];
-            }
-            return 0;
-        });
-
-        return $remaining;
-    }
-
-    /**
-     * Show the user's current roadmap
-     */
-    public function show(): View
-    {
-        $user = auth()->user();
-
-        // Get the latest roadmap for the user
-        $latestRoadmap = Roadmap::where('user_id', $user->id)
-            ->latest('updated_at')
-            ->first();
-
-        if (!$latestRoadmap) {
-            return view('roadmap.no-roadmap');
-        }
-
-        $studyProgram = $latestRoadmap->studyProgram;
-        $careerPath = $latestRoadmap->careerPath;
-
-        $completedIds = $user->progress()
-            ->where('study_program_id', $studyProgram->id)
-            ->where('status', 'completed')
-            ->pluck('subject_id')
-            ->toArray();
-
-        $inProgressIds = $user->progress()
-            ->where('study_program_id', $studyProgram->id)
-            ->where('status', 'in_progress')
-            ->pluck('subject_id')
-            ->toArray();
-
-        $roadmap = $this->generateRoadmap($user->id, $studyProgram, $completedIds, $inProgressIds, $careerPath);
-        $semesterRoadmap = $this->generateSemesterRoadmap($studyProgram, $completedIds, $inProgressIds, $careerPath);
-
-        return view('roadmap.show', [
-            'studyProgram' => $studyProgram,
-            'careerPath' => $careerPath,
-            'roadmap' => $roadmap,
-            'semesterRoadmap' => $semesterRoadmap,
-            'completed' => collect($completedIds),
-            'inProgress' => collect($inProgressIds),
-        ]);
-    }
-
-    /**
-     * Show all roadmaps history for the user
-     */
-    public function history(): View
-    {
-        $user = auth()->user();
-        $roadmaps = Roadmap::where('user_id', $user->id)
-            ->with('studyProgram', 'careerPath')
-            ->orderBy('updated_at', 'desc')
-            ->paginate(10);
-
-        return view('roadmap.history', [
-            'roadmaps' => $roadmaps,
-        ]);
-    }
-
-    /**
-     * Edit an existing roadmap
-     */
-    public function edit(Roadmap $roadmap): View
-    {
-        $this->authorize('view', $roadmap);
-
-        $user = auth()->user();
-        $studyProgram = $roadmap->studyProgram;
-        $careerPath = $roadmap->careerPath;
-
-        // Get current completed and in-progress subject IDs
-        $completedIds = $user->progress()
-            ->where('study_program_id', $studyProgram->id)
-            ->where('status', 'completed')
-            ->pluck('subject_id')
-            ->toArray();
-
-        $inProgressIds = $user->progress()
-            ->where('study_program_id', $studyProgram->id)
-            ->where('status', 'in_progress')
-            ->pluck('subject_id')
-            ->toArray();
-
-        // Get all study programs and career paths
-        $studyPrograms = StudyProgram::all();
-        $careerPaths = CareerPath::all();
-
-        return view('roadmap.edit', [
-            'roadmap' => $roadmap,
-            'studyProgram' => $studyProgram,
-            'careerPath' => $careerPath,
-            'studyPrograms' => $studyPrograms,
-            'careerPaths' => $careerPaths,
-            'completedIds' => $completedIds,
-            'inProgressIds' => $inProgressIds,
-        ]);
-    }
-
-    /**
-     * Delete a roadmap
-     */
-    public function destroy(Roadmap $roadmap)
-    {
-        $this->authorize('delete', $roadmap);
-
-        $user = auth()->user();
-        $studyProgram = $roadmap->studyProgram;
-
-        // Delete the roadmap
-        $roadmap->delete();
-
-        // Delete associated user progress
-        UserProgress::where('user_id', $user->id)
-            ->where('study_program_id', $studyProgram->id)
-            ->delete();
-
-        return redirect()->route('roadmap.show')
-            ->with('success', 'Roadmap deleted successfully.');
-    }
-
-    /**
-     * Generate semester-by-semester roadmap for upcoming years
-     */
-    private function generateSemesterRoadmap(StudyProgram $studyProgram, array $completedIds, array $inProgressIds, $careerPath = null)
-    {
-        $allSubjects = $studyProgram->subjects()->orderBy('year')->orderBy('semester_type')->get();
-
-        // Build roadmap organized by year and semester
-        $roadmap = [];
-
-        // Get subject IDs for career path if one is selected
-        $careerPathSubjectIds = $careerPath ? $careerPath->subjects()->pluck('subjects.id')->toArray() : [];
-
-        foreach ($allSubjects as $subject) {
-            $year = $subject->year;
-            $semester = $subject->getSemesterTypeFromCode() === 'winter' ? 'winter' : 'summer';
-
-            // Skip subjects from years beyond the program duration
-            if ($year > $studyProgram->duration_years) {
-                continue;
-            }
-
-            // Skip if already completed or in progress
-            if (in_array($subject->id, $completedIds) || in_array($subject->id, $inProgressIds)) {
-                continue;
-            }
-
-            // If career path is selected, filter to show:
-            // 1. Mandatory subjects (always show)
-            // 2. Electives related to the career path
-            if ($careerPath) {
-                $isElective = ($subject->pivot->type ?? 'mandatory') === 'elective';
-                $isInCareerPath = in_array($subject->id, $careerPathSubjectIds);
-
-                // Skip electives not in the career path
-                if ($isElective && !$isInCareerPath) {
-                    continue;
-                }
-            }
-
-            // Check prerequisites
-            $prerequisites = $subject->prerequisites()->get();
-            $prerequisitesMet = true;
-
-            if ($prerequisites->isNotEmpty()) {
-                foreach ($prerequisites as $prerequisite) {
-                    if (!in_array($prerequisite->id, $completedIds)) {
-                        $prerequisitesMet = false;
-                        break;
-                    }
-                }
-            }
-
-            // Initialize year structure if needed
-            if (!isset($roadmap[$year])) {
-                $roadmap[$year] = [
-                    'winter' => [],
-                    'summer' => [],
-                ];
-            }
-
-            $roadmap[$year][$semester][] = [
-                'subject' => $subject,
-                'ready' => $prerequisitesMet,
-                'prerequisites' => $prerequisites,
-            ];
-        }
-
-        return $roadmap;
-    }
-
-    /**
-     * Serialize roadmap data for storage in JSON format
-     */
-    private function serializeRoadmapData(array $roadmap): array
-    {
-        return array_map(function ($item) {
-            return [
-                'subject_id' => $item['subject']->id,
-                'subject_code' => $item['subject']->code,
-                'subject_name' => $item['subject']->name,
-                'subject_name_mk' => $item['subject']->name_mk,
-                'prerequisites' => $item['prerequisites']->pluck('id')->toArray(),
-                'ready' => $item['ready'],
-                'year' => $item['year'],
-                'type' => $item['type'],
-                'inCareerPath' => $item['inCareerPath'],
-                'credits' => $item['subject']->credits,
-            ];
-        }, $roadmap);
-    }
-
-    /**
-     * Serialize semester roadmap data for storage in JSON format
-     */
-    private function serializeSemesterRoadmapData(array $semesterRoadmap): array
-    {
-        $serialized = [];
-        foreach ($semesterRoadmap as $year => $semesters) {
-            $serialized[$year] = [];
-            foreach ($semesters as $semester => $items) {
-                $serialized[$year][$semester] = array_map(function ($item) {
-                    return [
-                        'subject_id' => $item['subject']->id,
-                        'subject_code' => $item['subject']->code,
-                        'subject_name' => $item['subject']->name,
-                        'subject_name_mk' => $item['subject']->name_mk,
-                        'prerequisites' => $item['prerequisites']->pluck('id')->toArray(),
-                        'ready' => $item['ready'],
-                        'credits' => $item['subject']->credits,
-                    ];
-                }, $items);
-            }
-        }
-        return $serialized;
-    }
-}
Index: app/Http/Controllers/Settings/PasswordController.php
===================================================================
--- app/Http/Controllers/Settings/PasswordController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ app/Http/Controllers/Settings/PasswordController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Http\Controllers\Settings;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Validation\Rules\Password;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class PasswordController extends Controller
+{
+    /**
+     * Show the user's password settings page.
+     */
+    public function edit(): Response
+    {
+        return Inertia::render('settings/password');
+    }
+
+    /**
+     * Update the user's password.
+     */
+    public function update(Request $request): RedirectResponse
+    {
+        $validated = $request->validate([
+            'current_password' => ['required', 'current_password'],
+            'password' => ['required', Password::defaults(), 'confirmed'],
+        ]);
+
+        $request->user()->update([
+            'password' => Hash::make($validated['password']),
+        ]);
+
+        return back();
+    }
+}
Index: app/Http/Controllers/Settings/ProfileController.php
===================================================================
--- app/Http/Controllers/Settings/ProfileController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ app/Http/Controllers/Settings/ProfileController.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Http\Controllers\Settings;
+
+use App\Http\Controllers\Controller;
+use App\Http\Requests\Settings\ProfileUpdateRequest;
+use Illuminate\Contracts\Auth\MustVerifyEmail;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class ProfileController extends Controller
+{
+    /**
+     * Show the user's profile settings page.
+     */
+    public function edit(Request $request): Response
+    {
+        return Inertia::render('settings/profile', [
+            'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
+            'status' => $request->session()->get('status'),
+        ]);
+    }
+
+    /**
+     * Update the user's profile settings.
+     */
+    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 to_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('/');
+    }
+}
Index: p/Http/Controllers/StudyProgramController.php
===================================================================
--- app/Http/Controllers/StudyProgramController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,157 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Models\StudyProgram;
-use App\Models\Subject;
-use Illuminate\Http\Request;
-
-class StudyProgramController extends Controller
-{
-    /**
-     * Display a listing of the resource.
-     */
-    public function index(Request $request)
-    {
-        $query = StudyProgram::query();
-
-        if ($request->filled('search')) {
-            $search = $request->input('search');
-            $query->where('name_mk', 'like', "%{$search}%")
-                  ->orWhere('name_en', 'like', "%{$search}%")
-                  ->orWhere('code', 'like', "%{$search}%");
-        }
-
-        $studyPrograms = $query->paginate(10);
-
-        return view('admin.study-programs.index', compact('studyPrograms'));
-    }
-
-    /**
-     * Show the form for creating a new resource.
-     */
-    public function create()
-    {
-        $subjects = Subject::orderBy('year')->orderBy('code')->get();
-        return view('admin.study-programs.create', compact('subjects'));
-    }
-
-    /**
-     * Store a newly created resource in storage.
-     */
-    public function store(Request $request)
-    {
-        $validated = $request->validate([
-            'name_mk' => 'required|string|max:255',
-            'name_en' => 'required|string|max:255',
-            'code' => 'required|string|unique:study_programs,code|max:50',
-            'description_mk' => 'nullable|string',
-            'description_en' => 'nullable|string',
-            'duration_years' => 'required|integer|between:1,6',
-            'cycle' => 'required|in:first,second',
-            'subjects' => 'nullable|array',
-            'subjects.*' => 'exists:subjects,id',
-            'subject_types.*' => 'in:mandatory,elective',
-            'subject_years.*' => 'integer|between:1,6',
-            'subject_semesters.*' => 'in:winter,summer',
-        ]);
-
-        $studyProgram = StudyProgram::create($validated);
-
-        // Attach subjects with their types, years, and semesters
-        if ($request->filled('subjects')) {
-            $subjectData = [];
-            foreach ($request->input('subjects') as $index => $subjectId) {
-                $type = $request->input("subject_types.{$index}", 'elective');
-                $year = $request->input("subject_years.{$index}", 1);
-                $semester = $request->input("subject_semesters.{$index}", 'winter');
-                $subjectData[$subjectId] = [
-                    'type' => $type,
-                    'year' => $year,
-                    'semester_type' => $semester,
-                    'order' => $index + 1
-                ];
-            }
-            $studyProgram->subjects()->attach($subjectData);
-        }
-
-        return redirect()->route('study-programs.show', $studyProgram)->with('success', 'Study program created successfully');
-    }
-
-    /**
-     * Display the specified resource.
-     */
-    public function show(StudyProgram $studyProgram)
-    {
-        $studyProgram->load('subjects');
-        $mandatorySubjects = $studyProgram->getMandatorySubjects();
-        $electiveSubjects = $studyProgram->getElectiveSubjects();
-
-        return view('admin.study-programs.show', compact('studyProgram', 'mandatorySubjects', 'electiveSubjects'));
-    }
-
-    /**
-     * Show the form for editing the specified resource.
-     */
-    public function edit(StudyProgram $studyProgram)
-    {
-        $studyProgram->load('subjects');
-        $allSubjects = Subject::orderBy('year')->orderBy('code')->get();
-        return view('admin.study-programs.edit', compact('studyProgram', 'allSubjects'));
-    }
-
-    /**
-     * Update the specified resource in storage.
-     */
-    public function update(Request $request, StudyProgram $studyProgram)
-    {
-        $validated = $request->validate([
-            'name_mk' => 'required|string|max:255',
-            'name_en' => 'required|string|max:255',
-            'code' => 'required|string|max:50|unique:study_programs,code,' . $studyProgram->id,
-            'description_mk' => 'nullable|string',
-            'description_en' => 'nullable|string',
-            'duration_years' => 'required|integer|between:1,6',
-            'cycle' => 'required|in:first,second',
-            'subjects' => 'nullable|array',
-            'subjects.*' => 'exists:subjects,id',
-            'subject_types.*' => 'in:mandatory,elective',
-            'subject_years.*' => 'integer|between:1,6',
-            'subject_semesters.*' => 'in:winter,summer',
-        ]);
-
-        $studyProgram->update($validated);
-
-        // Sync subjects with their types, years, and semesters
-        if ($request->filled('subjects')) {
-            $subjectData = [];
-            foreach ($request->input('subjects') as $index => $subjectId) {
-                $type = $request->input("subject_types.{$index}", 'elective');
-                $year = $request->input("subject_years.{$index}", 1);
-                $semester = $request->input("subject_semesters.{$index}", 'winter');
-                $subjectData[$subjectId] = [
-                    'type' => $type,
-                    'year' => $year,
-                    'semester_type' => $semester,
-                    'order' => $index + 1
-                ];
-            }
-            $studyProgram->subjects()->sync($subjectData);
-        } else {
-            $studyProgram->subjects()->sync([]);
-        }
-
-        return redirect()->route('study-programs.show', $studyProgram)->with('success', 'Study program updated successfully');
-    }
-
-    /**
-     * Remove the specified resource from storage.
-     */
-    public function destroy(StudyProgram $studyProgram)
-    {
-        $studyProgram->subjects()->detach();
-        $studyProgram->delete();
-
-        return redirect()->route('study-programs.index')->with('success', 'Study program deleted successfully');
-    }
-}
Index: p/Http/Controllers/SubjectController.php
===================================================================
--- app/Http/Controllers/SubjectController.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,125 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Models\Subject;
-use Illuminate\Http\Request;
-
-class SubjectController extends Controller
-{
-    /**
-     * Display a listing of the resource.
-     */
-    public function index(Request $request)
-    {
-        $query = Subject::query();
-
-        if ($request->filled('search')) {
-            $search = $request->input('search');
-            $query->where('name', 'like', "%{$search}%")
-                  ->orWhere('name_mk', 'like', "%{$search}%")
-                  ->orWhere('code', 'like', "%{$search}%");
-        }
-
-        $subjects = $query->orderBy('year')->orderBy('semester_type')->orderBy('code')->paginate(20);
-
-        return view('admin.subjects.index', compact('subjects'));
-    }
-
-    /**
-     * Show the form for creating a new resource.
-     */
-    public function create()
-    {
-        return view('admin.subjects.create');
-    }
-
-    /**
-     * Store a newly created resource in storage.
-     */
-    public function store(Request $request)
-    {
-        $validated = $request->validate([
-            'code' => 'required|string|unique:subjects,code|max:20',
-            'name' => 'required|string|max:255',
-            'name_mk' => 'nullable|string|max:255',
-            'description' => 'nullable|string',
-            'description_mk' => 'nullable|string',
-            'credits' => 'required|numeric|min:1|max:60',
-            'year' => 'required|integer|between:1,4',
-            'semester_type' => 'required|in:winter,summer',
-            'subject_type' => 'required|in:mandatory,elective',
-            'instructors' => 'nullable|string|max:255',
-            'total_hours' => 'nullable|integer',
-            'lecture_hours' => 'nullable|integer',
-            'practice_hours' => 'nullable|integer',
-        ]);
-
-        Subject::create($validated);
-
-        return redirect()->route('subjects.index')->with('success', 'Subject created successfully');
-    }
-
-    /**
-     * Display the specified resource.
-     */
-    public function show(Subject $subject)
-    {
-        return view('admin.subjects.show', compact('subject'));
-    }
-
-    /**
-     * Show the form for editing the specified resource.
-     */
-public function edit(Subject $subject)
-    {
-        $prerequisites = Subject::whereNotIn('id', [$subject->id])->orderBy('year')->orderBy('code')->get();
-        $careerPaths = \App\Models\CareerPath::all();
-        return view('admin.subjects.edit', compact('subject', 'prerequisites', 'careerPaths'));    }
-
-    /**     * Update the specified resource in storage.
-     */
-    public function update(Request $request, Subject $subject)
-    {
-        $validated = $request->validate([
-            'code' => 'required|string|max:20|unique:subjects,code,' . $subject->id,
-            'name' => 'required|string|max:255',
-            'name_mk' => 'nullable|string|max:255',
-            'description' => 'nullable|string',
-            'description_mk' => 'nullable|string',
-            'credits' => 'required|numeric|min:1|max:60',
-            'year' => 'required|integer|between:1,4',
-            'semester_type' => 'required|in:winter,summer',
-            'subject_type' => 'required|in:mandatory,elective',
-            'instructors' => 'nullable|string|max:255',
-            'total_hours' => 'nullable|integer',
-            'lecture_hours' => 'nullable|integer',
-            'practice_hours' => 'nullable|integer',
-            'prerequisites' => 'nullable|array',
-            'prerequisites.*' => 'exists:subjects,id',
-            'career_paths' => 'nullable|array',
-            'career_paths.*' => 'exists:career_paths,id',
-        ]);
-
-        $prerequisiteIds = $request->input('prerequisites', []);
-        $careerPathIds = $request->input('career_paths', []);
-
-        $subject->update($validated);
-        $subject->prerequisites()->sync($prerequisiteIds);
-        $subject->careerPaths()->sync($careerPathIds);
-
-        return redirect()->route('subjects.index')->with('success', 'Subject updated successfully');
-    }
-
-    /**
-     * Remove the specified resource from storage.
-     */
-    public function destroy(Subject $subject)
-    {
-        $subject->prerequisites()->detach();
-        $subject->requiredBy()->detach();
-        $subject->delete();
-
-        return redirect()->route('subjects.index')->with('success', 'Subject deleted successfully');
-    }
-}
Index: p/Http/Middleware/AdminMiddleware.php
===================================================================
--- app/Http/Middleware/AdminMiddleware.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,24 +1,0 @@
-<?php
-
-namespace App\Http\Middleware;
-
-use Closure;
-use Illuminate\Http\Request;
-use Symfony\Component\HttpFoundation\Response;
-
-class AdminMiddleware
-{
-    /**
-     * Handle an incoming request.
-     *
-     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
-     */
-    public function handle(Request $request, Closure $next): Response
-    {
-        if (!$request->user() || !$request->user()->isAdmin()) {
-            abort(403, 'Unauthorized access. Admin role required.');
-        }
-
-        return $next($request);
-    }
-}
Index: app/Http/Middleware/HandleAppearance.php
===================================================================
--- app/Http/Middleware/HandleAppearance.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ app/Http/Middleware/HandleAppearance.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\View;
+use Symfony\Component\HttpFoundation\Response;
+
+class HandleAppearance
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
+     */
+    public function handle(Request $request, Closure $next): Response
+    {
+        View::share('appearance', $request->cookie('appearance') ?? 'system');
+
+        return $next($request);
+    }
+}
Index: app/Http/Middleware/HandleInertiaRequests.php
===================================================================
--- app/Http/Middleware/HandleInertiaRequests.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ app/Http/Middleware/HandleInertiaRequests.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Inspiring;
+use Illuminate\Http\Request;
+use Inertia\Middleware;
+use Tighten\Ziggy\Ziggy;
+
+class HandleInertiaRequests extends Middleware
+{
+    /**
+     * The root template that's loaded on the first page visit.
+     *
+     * @see https://inertiajs.com/server-side-setup#root-template
+     *
+     * @var string
+     */
+    protected $rootView = 'app';
+
+    /**
+     * Determines the current asset version.
+     *
+     * @see https://inertiajs.com/asset-versioning
+     */
+    public function version(Request $request): ?string
+    {
+        return parent::version($request);
+    }
+
+    /**
+     * Define the props that are shared by default.
+     *
+     * @see https://inertiajs.com/shared-data
+     *
+     * @return array<string, mixed>
+     */
+    public function share(Request $request): array
+    {
+        [$message, $author] = str(Inspiring::quotes()->random())->explode('-');
+
+        return [
+            ...parent::share($request),
+            'name' => config('app.name'),
+            'quote' => ['message' => trim($message), 'author' => trim($author)],
+            'auth' => [
+                'user' => $request->user(),
+            ],
+            'ziggy' => fn (): array => [
+                ...(new Ziggy)->toArray(),
+                'location' => $request->url(),
+            ],
+            'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
+        ];
+    }
+}
Index: app/Http/Requests/Auth/LoginRequest.php
===================================================================
--- app/Http/Requests/Auth/LoginRequest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Http/Requests/Auth/LoginRequest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -46,5 +46,5 @@
 
             throw ValidationException::withMessages([
-                'email' => trans('auth.failed'),
+                'email' => __('auth.failed'),
             ]);
         }
@@ -69,5 +69,5 @@
 
         throw ValidationException::withMessages([
-            'email' => trans('auth.throttle', [
+            'email' => __('auth.throttle', [
                 'seconds' => $seconds,
                 'minutes' => ceil($seconds / 60),
Index: p/Http/Requests/ProfileUpdateRequest.php
===================================================================
--- app/Http/Requests/ProfileUpdateRequest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,30 +1,0 @@
-<?php
-
-namespace App\Http\Requests;
-
-use App\Models\User;
-use Illuminate\Foundation\Http\FormRequest;
-use Illuminate\Validation\Rule;
-
-class ProfileUpdateRequest extends FormRequest
-{
-    /**
-     * Get the validation rules that apply to the request.
-     *
-     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
-     */
-    public function rules(): array
-    {
-        return [
-            'name' => ['required', 'string', 'max:255'],
-            'email' => [
-                'required',
-                'string',
-                'lowercase',
-                'email',
-                'max:255',
-                Rule::unique(User::class)->ignore($this->user()->id),
-            ],
-        ];
-    }
-}
Index: app/Http/Requests/Settings/ProfileUpdateRequest.php
===================================================================
--- app/Http/Requests/Settings/ProfileUpdateRequest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ app/Http/Requests/Settings/ProfileUpdateRequest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests\Settings;
+
+use App\Models\User;
+use Illuminate\Contracts\Validation\ValidationRule;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Rule;
+
+class ProfileUpdateRequest extends FormRequest
+{
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, ValidationRule|array<mixed>|string>
+     */
+    public function rules(): array
+    {
+        return [
+            'name' => ['required', 'string', 'max:255'],
+
+            'email' => [
+                'required',
+                'string',
+                'lowercase',
+                'email',
+                'max:255',
+                Rule::unique(User::class)->ignore($this->user()->id),
+            ],
+        ];
+    }
+}
Index: p/Models/CareerPath.php
===================================================================
--- app/Models/CareerPath.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,27 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsToMany;
-use Illuminate\Database\Eloquent\Relations\HasMany;
-
-class CareerPath extends Model
-{
-    protected $fillable = [
-        'name',
-        'description',
-    ];
-
-    public function subjects(): BelongsToMany
-    {
-        return $this->belongsToMany(Subject::class, 'career_path_subject')
-            ->withPivot('order', 'is_required')
-            ->orderBy('career_path_subject.order');
-    }
-
-    public function userProgress(): HasMany
-    {
-        return $this->hasMany(UserProgress::class);
-    }
-}
Index: p/Models/Roadmap.php
===================================================================
--- app/Models/Roadmap.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,39 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-
-class Roadmap extends Model
-{
-    protected $table = 'roadmaps';
-
-    protected $fillable = [
-        'user_id',
-        'study_program_id',
-        'career_path_id',
-        'roadmap_data',
-        'semester_roadmap_data',
-    ];
-
-    protected $casts = [
-        'roadmap_data' => 'array',
-        'semester_roadmap_data' => 'array',
-    ];
-
-    public function user(): BelongsTo
-    {
-        return $this->belongsTo(User::class);
-    }
-
-    public function studyProgram(): BelongsTo
-    {
-        return $this->belongsTo(StudyProgram::class);
-    }
-
-    public function careerPath(): BelongsTo
-    {
-        return $this->belongsTo(CareerPath::class);
-    }
-}
Index: p/Models/StudyProgram.php
===================================================================
--- app/Models/StudyProgram.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,51 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsToMany;
-use Illuminate\Database\Eloquent\Relations\HasMany;
-
-class StudyProgram extends Model
-{
-    protected $fillable = [
-        'name_mk',
-        'name_en',
-        'description_mk',
-        'description_en',
-        'duration_years',
-        'cycle',
-        'code',
-    ];
-
-    public function subjects(): BelongsToMany
-    {
-        return $this->belongsToMany(Subject::class, 'study_program_subject')
-            ->withPivot('order', 'type')
-            ->orderBy('study_program_subject.order');
-    }
-
-    public function userProgress(): HasMany
-    {
-        return $this->hasMany(UserProgress::class);
-    }
-
-    public function getMandatorySubjects()
-    {
-        return $this->subjects()
-            ->wherePivot('type', 'mandatory')
-            ->get();
-    }
-
-    public function getElectiveSubjects()
-    {
-        return $this->subjects()
-            ->wherePivot('type', 'elective')
-            ->get();
-    }
-
-    public function getDisplayName(): string
-    {
-        return $this->name_mk . ' (' . $this->duration_years . ' години)';
-    }
-}
Index: p/Models/Subject.php
===================================================================
--- app/Models/Subject.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,112 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsToMany;
-use Illuminate\Database\Eloquent\Relations\HasMany;
-
-class Subject extends Model
-{
-    protected $fillable = [
-        'code',
-        'name',
-        'name_mk',
-        'description',
-        'description_mk',
-        'semester_type',
-        'year',
-        'subject_type',
-        'instructors',
-        'credits',
-        'total_hours',
-        'lecture_hours',
-        'practice_hours',
-    ];
-
-    public function studyPrograms(): BelongsToMany
-    {
-        return $this->belongsToMany(StudyProgram::class, 'study_program_subject')
-            ->withPivot('order', 'type')
-            ->orderBy('study_program_subject.order');
-    }
-
-    public function prerequisites(): BelongsToMany
-    {
-        return $this->belongsToMany(
-            Subject::class,
-            'subject_prerequisites',
-            'subject_id',
-            'prerequisite_id'
-        );
-    }
-
-    public function requiredBy(): BelongsToMany
-    {
-        return $this->belongsToMany(
-            Subject::class,
-            'subject_prerequisites',
-            'prerequisite_id',
-            'subject_id'
-        );
-    }
-
-    public function userProgress(): HasMany
-    {
-        return $this->hasMany(UserProgress::class);
-    }
-
-    public function careerPaths(): BelongsToMany
-    {
-        return $this->belongsToMany(CareerPath::class, 'career_path_subject');
-    }
-
-    public function getDisplayName(): string
-    {
-        return $this->code . ' - ' . $this->name;
-    }
-
-    /**
-     * Get semester type from subject code
-     * Pattern: F23L1W001 where:
-     *   F23 = program code
-     *   L = level/location (constant)
-     *   1 = year
-     *   W/S = semester type (W=winter, S=summer/second)
-     *   001 = subject number
-     *
-     * The letter after the year number determines semester type
-     */
-    public function getSemesterTypeFromCode(): string
-    {
-        // Match pattern like: F23L1W001 or F18L2S042
-        // Extract the W or S after the year digit
-        if (preg_match('/L\d([WS])/', $this->code, $matches)) {
-            return $matches[1] === 'W' ? 'winter' : 'summer';
-        }
-        return $this->semester_type ?? 'winter'; // Fallback to stored value
-    }
-
-    public function hasPrerequisitesMet($userId, $studyProgramId): bool
-    {
-        $prerequisites = $this->prerequisites()->get();
-
-        if ($prerequisites->isEmpty()) {
-            return true;
-        }
-
-        foreach ($prerequisites as $prerequisite) {
-            $completed = UserProgress::where('user_id', $userId)
-                ->where('subject_id', $prerequisite->id)
-                ->where('study_program_id', $studyProgramId)
-                ->where('status', 'completed')
-                ->exists();
-
-            if (!$completed) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
Index: app/Models/User.php
===================================================================
--- app/Models/User.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Models/User.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -5,5 +5,4 @@
 // use Illuminate\Contracts\Auth\MustVerifyEmail;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
-use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
@@ -23,5 +22,4 @@
         'email',
         'password',
-        'role',
     ];
 
@@ -48,36 +46,3 @@
         ];
     }
-
-    public function progress(): HasMany
-    {
-        return $this->hasMany(UserProgress::class);
-    }
-
-    public function getCompletedSubjectsForProgram($studyProgramId)
-    {
-        return $this->progress()
-            ->where('study_program_id', $studyProgramId)
-            ->where('status', 'completed')
-            ->pluck('subject_id')
-            ->toArray();
-    }
-
-    public function getInProgressSubjectsForProgram($studyProgramId)
-    {
-        return $this->progress()
-            ->where('study_program_id', $studyProgramId)
-            ->where('status', 'in_progress')
-            ->pluck('subject_id')
-            ->toArray();
-    }
-
-    public function isAdmin(): bool
-    {
-        return $this->role === 'admin';
-    }
-
-    public function isStudent(): bool
-    {
-        return $this->role === 'student';
-    }
 }
Index: p/Models/UserProgress.php
===================================================================
--- app/Models/UserProgress.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,44 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-
-class UserProgress extends Model
-{
-    protected $table = 'user_progress';
-
-    protected $fillable = [
-        'user_id',
-        'subject_id',
-        'study_program_id',
-        'career_path_id',
-        'status',
-        'completed_at',
-    ];
-
-    protected $casts = [
-        'completed_at' => 'datetime',
-    ];
-
-    public function user(): BelongsTo
-    {
-        return $this->belongsTo(User::class);
-    }
-
-    public function subject(): BelongsTo
-    {
-        return $this->belongsTo(Subject::class);
-    }
-
-    public function studyProgram(): BelongsTo
-    {
-        return $this->belongsTo(StudyProgram::class);
-    }
-
-    public function careerPath(): BelongsTo
-    {
-        return $this->belongsTo(CareerPath::class);
-    }
-}
Index: p/Policies/RoadmapPolicy.php
===================================================================
--- app/Policies/RoadmapPolicy.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,25 +1,0 @@
-<?php
-
-namespace App\Policies;
-
-use App\Models\Roadmap;
-use App\Models\User;
-
-class RoadmapPolicy
-{
-    /**
-     * Determine whether the user can view the roadmap
-     */
-    public function view(User $user, Roadmap $roadmap): bool
-    {
-        return $user->id === $roadmap->user_id;
-    }
-
-    /**
-     * Determine whether the user can delete the roadmap
-     */
-    public function delete(User $user, Roadmap $roadmap): bool
-    {
-        return $user->id === $roadmap->user_id;
-    }
-}
Index: app/Providers/AppServiceProvider.php
===================================================================
--- app/Providers/AppServiceProvider.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ app/Providers/AppServiceProvider.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -3,7 +3,4 @@
 namespace App\Providers;
 
-use App\Models\Roadmap;
-use App\Policies\RoadmapPolicy;
-use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\ServiceProvider;
 
@@ -23,13 +20,5 @@
     public function boot(): void
     {
-        $this->registerPolicies();
-    }
-
-    /**
-     * Register authorization policies
-     */
-    protected function registerPolicies(): void
-    {
-        Gate::policy(Roadmap::class, RoadmapPolicy::class);
+        //
     }
 }
Index: p/View/Components/AppLayout.php
===================================================================
--- app/View/Components/AppLayout.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<?php
-
-namespace App\View\Components;
-
-use Illuminate\View\Component;
-use Illuminate\View\View;
-
-class AppLayout extends Component
-{
-    /**
-     * Get the view / contents that represents the component.
-     */
-    public function render(): View
-    {
-        return view('layouts.app');
-    }
-}
Index: p/View/Components/GuestLayout.php
===================================================================
--- app/View/Components/GuestLayout.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<?php
-
-namespace App\View\Components;
-
-use Illuminate\View\Component;
-use Illuminate\View\View;
-
-class GuestLayout extends Component
-{
-    /**
-     * Get the view / contents that represents the component.
-     */
-    public function render(): View
-    {
-        return view('layouts.guest');
-    }
-}
Index: bootstrap/app.php
===================================================================
--- bootstrap/app.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ bootstrap/app.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,7 +1,10 @@
 <?php
 
+use App\Http\Middleware\HandleAppearance;
+use App\Http\Middleware\HandleInertiaRequests;
 use Illuminate\Foundation\Application;
 use Illuminate\Foundation\Configuration\Exceptions;
 use Illuminate\Foundation\Configuration\Middleware;
+use Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets;
 
 return Application::configure(basePath: dirname(__DIR__))
@@ -11,10 +14,14 @@
         health: '/up',
     )
-    ->withMiddleware(function (Middleware $middleware): void {
-        $middleware->alias([
-            'admin' => \App\Http\Middleware\AdminMiddleware::class,
+    ->withMiddleware(function (Middleware $middleware) {
+        $middleware->encryptCookies(except: ['appearance', 'sidebar_state']);
+
+        $middleware->web(append: [
+            HandleAppearance::class,
+            HandleInertiaRequests::class,
+            AddLinkHeadersForPreloadedAssets::class,
         ]);
     })
-    ->withExceptions(function (Exceptions $exceptions): void {
+    ->withExceptions(function (Exceptions $exceptions) {
         //
     })->create();
Index: eck_prerequisites.php
===================================================================
--- check_prerequisites.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,51 +1,0 @@
-<?php
-
-require 'vendor/autoload.php';
-$app = require_once 'bootstrap/app.php';
-$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
-
-use Illuminate\Support\Facades\DB;
-
-echo "=== CURRICULUM IMPORT SUMMARY ===\n\n";
-
-// Count subjects
-$total = DB::table('subjects')->count();
-$withPrereqs = DB::table('subjects')
-    ->whereExists(function($query) {
-        $query->select(DB::raw(1))
-            ->from('subject_prerequisites')
-            ->where('subject_prerequisites.subject_id', DB::raw('subjects.id'));
-    })
-    ->count();
-
-echo "Total subjects: $total\n";
-echo "Subjects with prerequisites: $withPrereqs\n\n";
-
-// Count prerequisites
-$totalPrereqs = DB::table('subject_prerequisites')->count();
-echo "Total prerequisite relationships: $totalPrereqs\n\n";
-
-// Show some examples of subjects with prerequisites
-echo "--- Examples of subjects with prerequisites ---\n";
-$examples = DB::table('subjects')
-    ->whereExists(function($query) {
-        $query->select(DB::raw(1))
-            ->from('subject_prerequisites')
-            ->whereRaw('subject_prerequisites.subject_id = subjects.id');
-    })
-    ->limit(5)
-    ->get();
-
-foreach ($examples as $subject) {
-    echo "\n{$subject->code} - {$subject->name}\n";
-
-    $prereqs = DB::table('subject_prerequisites')
-        ->join('subjects', 'subject_prerequisites.prerequisite_id', '=', 'subjects.id')
-        ->where('subject_prerequisites.subject_id', $subject->id)
-        ->select('subjects.code', 'subjects.name')
-        ->get();
-
-    foreach ($prereqs as $prereq) {
-        echo "  → Requires: {$prereq->code} ({$prereq->name})\n";
-    }
-}
Index: components.json
===================================================================
--- components.json	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ components.json	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,21 @@
+{
+    "$schema": "https://ui.shadcn.com/schema.json",
+    "style": "default",
+    "rsc": false,
+    "tsx": true,
+    "tailwind": {
+        "config": "tailwind.config.js",
+        "css": "resources/css/app.css",
+        "baseColor": "neutral",
+        "cssVariables": true,
+        "prefix": ""
+    },
+    "aliases": {
+        "components": "@/components",
+        "utils": "@/lib/utils",
+        "ui": "@/components/ui",
+        "lib": "@/lib",
+        "hooks": "@/hooks"
+    },
+    "iconLibrary": "lucide"
+}
Index: composer.json
===================================================================
--- composer.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ composer.json	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,24 +1,28 @@
 {
     "$schema": "https://getcomposer.org/schema.json",
-    "name": "laravel/laravel",
+    "name": "laravel/react-starter-kit",
     "type": "project",
     "description": "The skeleton application for the Laravel framework.",
-    "keywords": ["laravel", "framework"],
+    "keywords": [
+        "laravel",
+        "framework"
+    ],
     "license": "MIT",
     "require": {
         "php": "^8.2",
+        "inertiajs/inertia-laravel": "^2.0",
         "laravel/framework": "^12.0",
         "laravel/tinker": "^2.10.1",
-        "symfony/dom-crawler": "^7.4"
+        "tightenco/ziggy": "^2.4"
     },
     "require-dev": {
         "fakerphp/faker": "^1.23",
-        "laravel/breeze": "^2.3",
         "laravel/pail": "^1.2.2",
-        "laravel/pint": "^1.24",
+        "laravel/pint": "^1.18",
         "laravel/sail": "^1.41",
         "mockery/mockery": "^1.6",
         "nunomaduro/collision": "^8.6",
-        "phpunit/phpunit": "^11.5.3"
+        "pestphp/pest": "^3.8",
+        "pestphp/pest-plugin-laravel": "^3.2"
     },
     "autoload": {
@@ -35,20 +39,4 @@
     },
     "scripts": {
-        "setup": [
-            "composer install",
-            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
-            "@php artisan key:generate",
-            "@php artisan migrate --force",
-            "npm install",
-            "npm run build"
-        ],
-        "dev": [
-            "Composer\\Config::disableProcessTimeout",
-            "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
-        ],
-        "test": [
-            "@php artisan config:clear --ansi",
-            "@php artisan test"
-        ],
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
@@ -66,6 +54,16 @@
             "@php artisan migrate --graceful --ansi"
         ],
-        "pre-package-uninstall": [
-            "Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
+        "dev": [
+            "Composer\\Config::disableProcessTimeout",
+            "npx concurrently -c \"#93c5fd,#c4b5fd,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"npm run dev\" --names='server,queue,vite'"
+        ],
+        "dev:ssr": [
+            "npm run build:ssr",
+            "Composer\\Config::disableProcessTimeout",
+            "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"php artisan inertia:start-ssr\" --names=server,queue,logs,ssr"
+        ],
+        "test": [
+            "@php artisan config:clear --ansi",
+            "@php artisan test"
         ]
     },
Index: composer.lock
===================================================================
--- composer.lock	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ composer.lock	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -5,27 +5,27 @@
         "This file is @generated automatically"
     ],
-    "content-hash": "f98adfc0a76a7b18d6c82bfafdd5ce5b",
+    "content-hash": "b7531f73c7a0f0d5c4e7e8690992afc1",
     "packages": [
         {
             "name": "brick/math",
-            "version": "0.14.1",
+            "version": "0.12.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/brick/math.git",
-                "reference": "f05858549e5f9d7bb45875a75583240a38a281d0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0",
-                "reference": "f05858549e5f9d7bb45875a75583240a38a281d0",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^8.2"
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
             },
             "require-dev": {
                 "php-coveralls/php-coveralls": "^2.2",
-                "phpstan/phpstan": "2.1.22",
-                "phpunit/phpunit": "^11.5"
+                "phpunit/phpunit": "^10.1",
+                "vimeo/psalm": "6.8.8"
             },
             "type": "library",
@@ -57,5 +57,5 @@
             "support": {
                 "issues": "https://github.com/brick/math/issues",
-                "source": "https://github.com/brick/math/tree/0.14.1"
+                "source": "https://github.com/brick/math/tree/0.12.3"
             },
             "funding": [
@@ -65,5 +65,5 @@
                 }
             ],
-            "time": "2025-11-24T14:40:29+00:00"
+            "time": "2025-02-28T13:11:00+00:00"
         },
         {
@@ -213,14 +213,14 @@
         {
             "name": "doctrine/inflector",
-            "version": "2.1.0",
+            "version": "2.0.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/inflector.git",
-                "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
-                "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
                 "shasum": ""
             },
@@ -229,14 +229,15 @@
             },
             "require-dev": {
-                "doctrine/coding-standard": "^12.0 || ^13.0",
-                "phpstan/phpstan": "^1.12 || ^2.0",
-                "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
-                "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
-                "phpunit/phpunit": "^8.5 || ^12.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Inflector\\": "src"
+                "doctrine/coding-standard": "^11.0",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.3",
+                "phpunit/phpunit": "^8.5 || ^9.5",
+                "vimeo/psalm": "^4.25 || ^5.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
                 }
             },
@@ -283,5 +284,5 @@
             "support": {
                 "issues": "https://github.com/doctrine/inflector/issues",
-                "source": "https://github.com/doctrine/inflector/tree/2.1.0"
+                "source": "https://github.com/doctrine/inflector/tree/2.0.10"
             },
             "funding": [
@@ -299,5 +300,5 @@
                 }
             ],
-            "time": "2025-08-10T19:31:58+00:00"
+            "time": "2024-02-18T20:23:39+00:00"
         },
         {
@@ -380,18 +381,19 @@
         {
             "name": "dragonmantank/cron-expression",
-            "version": "v3.6.0",
+            "version": "v3.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dragonmantank/cron-expression.git",
-                "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
-                "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^8.2|^8.3|^8.4|^8.5"
+                "reference": "8c784d071debd117328803d86b2097615b457500"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
+                "reference": "8c784d071debd117328803d86b2097615b457500",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2|^8.0",
+                "webmozart/assert": "^1.0"
             },
             "replace": {
@@ -399,7 +401,7 @@
             },
             "require-dev": {
-                "phpstan/extension-installer": "^1.4.3",
-                "phpstan/phpstan": "^1.12.32|^2.1.31",
-                "phpunit/phpunit": "^8.5.48|^9.0"
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^1.0",
+                "phpunit/phpunit": "^7.0|^8.0|^9.0"
             },
             "type": "library",
@@ -432,5 +434,5 @@
             "support": {
                 "issues": "https://github.com/dragonmantank/cron-expression/issues",
-                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0"
+                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
             },
             "funding": [
@@ -440,5 +442,5 @@
                 }
             ],
-            "time": "2025-10-31T18:51:33+00:00"
+            "time": "2024-10-09T13:47:03+00:00"
         },
         {
@@ -644,20 +646,20 @@
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.10.0",
+            "version": "7.9.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
-                "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+                "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+                "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^2.3",
-                "guzzlehttp/psr7": "^2.8",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+                "guzzlehttp/psr7": "^2.7.0",
                 "php": "^7.2.5 || ^8.0",
                 "psr/http-client": "^1.0",
@@ -750,5 +752,5 @@
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
+                "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
             },
             "funding": [
@@ -766,18 +768,18 @@
                 }
             ],
-            "time": "2025-08-23T22:36:01+00:00"
+            "time": "2025-03-27T13:37:11+00:00"
         },
         {
             "name": "guzzlehttp/promises",
-            "version": "2.3.0",
+            "version": "2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/promises.git",
-                "reference": "481557b130ef3790cf82b713667b43030dc9c957"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
-                "reference": "481557b130ef3790cf82b713667b43030dc9c957",
+                "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
+                "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
                 "shasum": ""
             },
@@ -787,5 +789,5 @@
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
             },
             "type": "library",
@@ -833,5 +835,5 @@
             "support": {
                 "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/2.3.0"
+                "source": "https://github.com/guzzle/promises/tree/2.2.0"
             },
             "funding": [
@@ -849,18 +851,18 @@
                 }
             ],
-            "time": "2025-08-22T14:34:08+00:00"
+            "time": "2025-03-27T13:27:01+00:00"
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "2.8.0",
+            "version": "2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "21dc724a0583619cd1652f673303492272778051"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
-                "reference": "21dc724a0583619cd1652f673303492272778051",
+                "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+                "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
                 "shasum": ""
             },
@@ -878,5 +880,5 @@
                 "bamarni/composer-bin-plugin": "^1.8.2",
                 "http-interop/http-factory-tests": "0.9.0",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
             },
             "suggest": {
@@ -949,5 +951,5 @@
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.8.0"
+                "source": "https://github.com/guzzle/psr7/tree/2.7.1"
             },
             "funding": [
@@ -965,18 +967,18 @@
                 }
             ],
-            "time": "2025-08-23T21:21:41+00:00"
+            "time": "2025-03-27T12:30:47+00:00"
         },
         {
             "name": "guzzlehttp/uri-template",
-            "version": "v1.0.5",
+            "version": "v1.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/uri-template.git",
-                "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
-                "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+                "reference": "30e286560c137526eccd4ce21b2de477ab0676d2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2",
+                "reference": "30e286560c137526eccd4ce21b2de477ab0676d2",
                 "shasum": ""
             },
@@ -987,5 +989,5 @@
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25",
+                "phpunit/phpunit": "^8.5.36 || ^9.6.15",
                 "uri-template/tests": "1.0.0"
             },
@@ -1035,5 +1037,5 @@
             "support": {
                 "issues": "https://github.com/guzzle/uri-template/issues",
-                "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
+                "source": "https://github.com/guzzle/uri-template/tree/v1.0.4"
             },
             "funding": [
@@ -1051,22 +1053,90 @@
                 }
             ],
-            "time": "2025-08-22T14:27:06+00:00"
+            "time": "2025-02-03T10:55:03+00:00"
+        },
+        {
+            "name": "inertiajs/inertia-laravel",
+            "version": "v2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/inertiajs/inertia-laravel.git",
+                "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/248e815cf8d41307cbfb735efaa514c118e2f3b4",
+                "reference": "248e815cf8d41307cbfb735efaa514c118e2f3b4",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "laravel/framework": "^10.0|^11.0|^12.0",
+                "php": "^8.1.0",
+                "symfony/console": "^6.2|^7.0"
+            },
+            "require-dev": {
+                "laravel/pint": "^1.16",
+                "mockery/mockery": "^1.3.3",
+                "orchestra/testbench": "^8.0|^9.2|^10.0",
+                "phpunit/phpunit": "^10.4|^11.5",
+                "roave/security-advisories": "dev-master"
+            },
+            "suggest": {
+                "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command."
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Inertia\\ServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "files": [
+                    "./helpers.php"
+                ],
+                "psr-4": {
+                    "Inertia\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jonathan Reinink",
+                    "email": "jonathan@reinink.ca",
+                    "homepage": "https://reinink.ca"
+                }
+            ],
+            "description": "The Laravel adapter for Inertia.js.",
+            "keywords": [
+                "inertia",
+                "laravel"
+            ],
+            "support": {
+                "issues": "https://github.com/inertiajs/inertia-laravel/issues",
+                "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.2"
+            },
+            "time": "2025-04-10T15:08:36+00:00"
         },
         {
             "name": "laravel/framework",
-            "version": "v12.40.2",
+            "version": "v12.16.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "1ccd99220b474500e672b373f32bd709ec38de50"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/1ccd99220b474500e672b373f32bd709ec38de50",
-                "reference": "1ccd99220b474500e672b373f32bd709ec38de50",
-                "shasum": ""
-            },
-            "require": {
-                "brick/math": "^0.11|^0.12|^0.13|^0.14",
+                "reference": "293bb1c70224faebfd3d4328e201c37115da055f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/293bb1c70224faebfd3d4328e201c37115da055f",
+                "reference": "293bb1c70224faebfd3d4328e201c37115da055f",
+                "shasum": ""
+            },
+            "require": {
+                "brick/math": "^0.11|^0.12",
                 "composer-runtime-api": "^2.2",
                 "doctrine/inflector": "^2.0.5",
@@ -1104,7 +1174,5 @@
                 "symfony/mailer": "^7.2.0",
                 "symfony/mime": "^7.2.0",
-                "symfony/polyfill-php83": "^1.33",
-                "symfony/polyfill-php84": "^1.33",
-                "symfony/polyfill-php85": "^1.33",
+                "symfony/polyfill-php83": "^1.31",
                 "symfony/process": "^7.2.0",
                 "symfony/routing": "^7.2.0",
@@ -1142,5 +1210,4 @@
                 "illuminate/hashing": "self.version",
                 "illuminate/http": "self.version",
-                "illuminate/json-schema": "self.version",
                 "illuminate/log": "self.version",
                 "illuminate/macroable": "self.version",
@@ -1175,6 +1242,5 @@
                 "league/flysystem-sftp-v3": "^3.25.1",
                 "mockery/mockery": "^1.6.10",
-                "opis/json-schema": "^2.4.1",
-                "orchestra/testbench-core": "^10.8.0",
+                "orchestra/testbench-core": "^10.0.0",
                 "pda/pheanstalk": "^5.0.6|^7.0.0",
                 "php-http/discovery": "^1.15",
@@ -1182,5 +1248,5 @@
                 "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
                 "predis/predis": "^2.3|^3.0",
-                "resend/resend-php": "^0.10.0|^1.0",
+                "resend/resend-php": "^0.10.0",
                 "symfony/cache": "^7.2.0",
                 "symfony/http-client": "^7.2.0",
@@ -1201,5 +1267,5 @@
                 "ext-posix": "Required to use all features of the queue worker.",
                 "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).",
-                "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).",
+                "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
                 "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
                 "laravel/tinker": "Required to use the tinker console command (^2.0).",
@@ -1216,5 +1282,5 @@
                 "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
                 "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
-                "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
+                "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).",
                 "symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
                 "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
@@ -1270,18 +1336,18 @@
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2025-11-26T19:24:25+00:00"
+            "time": "2025-05-27T15:49:44+00:00"
         },
         {
             "name": "laravel/prompts",
-            "version": "v0.3.8",
+            "version": "v0.3.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/prompts.git",
-                "reference": "096748cdfb81988f60090bbb839ce3205ace0d35"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35",
-                "reference": "096748cdfb81988f60090bbb839ce3205ace0d35",
+                "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1",
+                "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1",
                 "shasum": ""
             },
@@ -1299,7 +1365,7 @@
                 "illuminate/collections": "^10.0|^11.0|^12.0",
                 "mockery/mockery": "^1.5",
-                "pestphp/pest": "^2.3|^3.4|^4.0",
-                "phpstan/phpstan": "^1.12.28",
-                "phpstan/phpstan-mockery": "^1.1.3"
+                "pestphp/pest": "^2.3|^3.4",
+                "phpstan/phpstan": "^1.11",
+                "phpstan/phpstan-mockery": "^1.1"
             },
             "suggest": {
@@ -1327,20 +1393,20 @@
             "support": {
                 "issues": "https://github.com/laravel/prompts/issues",
-                "source": "https://github.com/laravel/prompts/tree/v0.3.8"
-            },
-            "time": "2025-11-21T20:52:52+00:00"
+                "source": "https://github.com/laravel/prompts/tree/v0.3.5"
+            },
+            "time": "2025-02-11T13:34:40+00:00"
         },
         {
             "name": "laravel/serializable-closure",
-            "version": "v2.0.7",
+            "version": "v2.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/serializable-closure.git",
-                "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
-                "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
+                "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841",
+                "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841",
                 "shasum": ""
             },
@@ -1351,5 +1417,5 @@
                 "illuminate/support": "^10.0|^11.0|^12.0",
                 "nesbot/carbon": "^2.67|^3.0",
-                "pestphp/pest": "^2.36|^3.0|^4.0",
+                "pestphp/pest": "^2.36|^3.0",
                 "phpstan/phpstan": "^2.0",
                 "symfony/var-dumper": "^6.2.0|^7.0.0"
@@ -1390,18 +1456,18 @@
                 "source": "https://github.com/laravel/serializable-closure"
             },
-            "time": "2025-11-21T20:52:36+00:00"
+            "time": "2025-03-19T13:51:03+00:00"
         },
         {
             "name": "laravel/tinker",
-            "version": "v2.10.2",
+            "version": "v2.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/tinker.git",
-                "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/tinker/zipball/3bcb5f62d6f837e0f093a601e26badafb127bd4c",
-                "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c",
+                "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3",
+                "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3",
                 "shasum": ""
             },
@@ -1454,20 +1520,20 @@
             "support": {
                 "issues": "https://github.com/laravel/tinker/issues",
-                "source": "https://github.com/laravel/tinker/tree/v2.10.2"
-            },
-            "time": "2025-11-20T16:29:12+00:00"
+                "source": "https://github.com/laravel/tinker/tree/v2.10.1"
+            },
+            "time": "2025-01-27T14:24:01+00:00"
         },
         {
             "name": "league/commonmark",
-            "version": "2.8.0",
+            "version": "2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
-                "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+                "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
+                "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
                 "shasum": ""
             },
@@ -1498,5 +1564,5 @@
                 "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
                 "unleashedtech/php-coding-standard": "^3.1.1",
-                "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
+                "vimeo/psalm": "^4.24.0 || ^5.0.0"
             },
             "suggest": {
@@ -1506,5 +1572,5 @@
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.9-dev"
+                    "dev-main": "2.8-dev"
                 }
             },
@@ -1563,5 +1629,5 @@
                 }
             ],
-            "time": "2025-11-26T21:48:24+00:00"
+            "time": "2025-05-05T12:20:28+00:00"
         },
         {
@@ -1649,14 +1715,14 @@
         {
             "name": "league/flysystem",
-            "version": "3.30.2",
+            "version": "3.29.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
-                "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
+                "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319",
+                "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319",
                 "shasum": ""
             },
@@ -1682,5 +1748,5 @@
                 "ext-fileinfo": "*",
                 "ext-ftp": "*",
-                "ext-mongodb": "^1.3|^2",
+                "ext-mongodb": "^1.3",
                 "ext-zip": "*",
                 "friendsofphp/php-cs-fixer": "^3.5",
@@ -1688,5 +1754,5 @@
                 "guzzlehttp/psr7": "^2.6",
                 "microsoft/azure-storage-blob": "^1.1",
-                "mongodb/mongodb": "^1.2|^2",
+                "mongodb/mongodb": "^1.2",
                 "phpseclib/phpseclib": "^3.0.36",
                 "phpstan/phpstan": "^1.10",
@@ -1726,20 +1792,20 @@
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/3.30.2"
-            },
-            "time": "2025-11-10T17:13:11+00:00"
+                "source": "https://github.com/thephpleague/flysystem/tree/3.29.1"
+            },
+            "time": "2024-10-08T08:58:34+00:00"
         },
         {
             "name": "league/flysystem-local",
-            "version": "3.30.2",
+            "version": "3.29.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem-local.git",
-                "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d",
-                "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d",
+                "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27",
+                "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27",
                 "shasum": ""
             },
@@ -1775,7 +1841,7 @@
             ],
             "support": {
-                "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2"
-            },
-            "time": "2025-11-10T11:23:37+00:00"
+                "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0"
+            },
+            "time": "2024-08-09T21:24:39+00:00"
         },
         {
@@ -1837,20 +1903,19 @@
         {
             "name": "league/uri",
-            "version": "7.6.0",
+            "version": "7.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/uri.git",
-                "reference": "f625804987a0a9112d954f9209d91fec52182344"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/uri/zipball/f625804987a0a9112d954f9209d91fec52182344",
-                "reference": "f625804987a0a9112d954f9209d91fec52182344",
-                "shasum": ""
-            },
-            "require": {
-                "league/uri-interfaces": "^7.6",
-                "php": "^8.1",
-                "psr/http-factory": "^1"
+                "reference": "81fb5145d2644324614cc532b28efd0215bda430"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430",
+                "reference": "81fb5145d2644324614cc532b28efd0215bda430",
+                "shasum": ""
+            },
+            "require": {
+                "league/uri-interfaces": "^7.5",
+                "php": "^8.1"
             },
             "conflict": {
@@ -1859,14 +1924,10 @@
             "suggest": {
                 "ext-bcmath": "to improve IPV4 host parsing",
-                "ext-dom": "to convert the URI into an HTML anchor tag",
                 "ext-fileinfo": "to create Data URI from file contennts",
                 "ext-gmp": "to improve IPV4 host parsing",
                 "ext-intl": "to handle IDN host with the best performance",
-                "ext-uri": "to use the PHP native URI class",
                 "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
                 "league/uri-components": "Needed to easily manipulate URI objects components",
-                "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
                 "php-64bit": "to improve IPV4 host parsing",
-                "rowbot/url": "to handle WHATWG URL",
                 "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
             },
@@ -1896,5 +1957,4 @@
             "homepage": "https://uri.thephpleague.com",
             "keywords": [
-                "URN",
                 "data-uri",
                 "file-uri",
@@ -1909,9 +1969,7 @@
                 "query-string",
                 "querystring",
-                "rfc2141",
                 "rfc3986",
                 "rfc3987",
                 "rfc6570",
-                "rfc8141",
                 "uri",
                 "uri-template",
@@ -1923,5 +1981,5 @@
                 "forum": "https://thephpleague.slack.com",
                 "issues": "https://github.com/thephpleague/uri-src/issues",
-                "source": "https://github.com/thephpleague/uri/tree/7.6.0"
+                "source": "https://github.com/thephpleague/uri/tree/7.5.1"
             },
             "funding": [
@@ -1931,18 +1989,18 @@
                 }
             ],
-            "time": "2025-11-18T12:17:23+00:00"
+            "time": "2024-12-08T08:40:02+00:00"
         },
         {
             "name": "league/uri-interfaces",
-            "version": "7.6.0",
+            "version": "7.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/uri-interfaces.git",
-                "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/ccbfb51c0445298e7e0b7f4481b942f589665368",
-                "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368",
+                "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
+                "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
                 "shasum": ""
             },
@@ -1950,4 +2008,5 @@
                 "ext-filter": "*",
                 "php": "^8.1",
+                "psr/http-factory": "^1",
                 "psr/http-message": "^1.1 || ^2.0"
             },
@@ -1957,5 +2016,4 @@
                 "ext-intl": "to handle IDN host with the best performance",
                 "php-64bit": "to improve IPV4 host parsing",
-                "rowbot/url": "to handle WHATWG URL",
                 "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
             },
@@ -1982,5 +2040,5 @@
                 }
             ],
-            "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
+            "description": "Common interfaces and classes for URI representation and interaction",
             "homepage": "https://uri.thephpleague.com",
             "keywords": [
@@ -2007,5 +2065,5 @@
                 "forum": "https://thephpleague.slack.com",
                 "issues": "https://github.com/thephpleague/uri-src/issues",
-                "source": "https://github.com/thephpleague/uri-interfaces/tree/7.6.0"
+                "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0"
             },
             "funding": [
@@ -2015,72 +2073,5 @@
                 }
             ],
-            "time": "2025-11-18T12:17:23+00:00"
-        },
-        {
-            "name": "masterminds/html5",
-            "version": "2.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Masterminds/html5-php.git",
-                "reference": "fcf91eb64359852f00d921887b219479b4f21251"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
-                "reference": "fcf91eb64359852f00d921887b219479b4f21251",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "php": ">=5.3.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Masterminds\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Matt Butcher",
-                    "email": "technosophos@gmail.com"
-                },
-                {
-                    "name": "Matt Farina",
-                    "email": "matt@mattfarina.com"
-                },
-                {
-                    "name": "Asmir Mustafic",
-                    "email": "goetas@gmail.com"
-                }
-            ],
-            "description": "An HTML5 parser and serializer.",
-            "homepage": "http://masterminds.github.io/html5-php",
-            "keywords": [
-                "HTML5",
-                "dom",
-                "html",
-                "parser",
-                "querypath",
-                "serializer",
-                "xml"
-            ],
-            "support": {
-                "issues": "https://github.com/Masterminds/html5-php/issues",
-                "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
-            },
-            "time": "2025-07-25T09:04:22+00:00"
+            "time": "2024-12-08T08:18:47+00:00"
         },
         {
@@ -2189,14 +2180,14 @@
         {
             "name": "nesbot/carbon",
-            "version": "3.10.3",
+            "version": "3.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/CarbonPHP/carbon.git",
-                "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f",
-                "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f",
+                "reference": "ced71f79398ece168e24f7f7710462f462310d4d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ced71f79398ece168e24f7f7710462f462310d4d",
+                "reference": "ced71f79398ece168e24f7f7710462f462310d4d",
                 "shasum": ""
             },
@@ -2206,7 +2197,7 @@
                 "php": "^8.1",
                 "psr/clock": "^1.0",
-                "symfony/clock": "^6.3.12 || ^7.0",
+                "symfony/clock": "^6.3 || ^7.0",
                 "symfony/polyfill-mbstring": "^1.0",
-                "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0"
+                "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0"
             },
             "provide": {
@@ -2216,11 +2207,12 @@
                 "doctrine/dbal": "^3.6.3 || ^4.0",
                 "doctrine/orm": "^2.15.2 || ^3.0",
-                "friendsofphp/php-cs-fixer": "^v3.87.1",
+                "friendsofphp/php-cs-fixer": "^3.57.2",
                 "kylekatarnls/multi-tester": "^2.5.3",
+                "ondrejmirtes/better-reflection": "^6.25.0.4",
                 "phpmd/phpmd": "^2.15.0",
-                "phpstan/extension-installer": "^1.4.3",
-                "phpstan/phpstan": "^2.1.22",
-                "phpunit/phpunit": "^10.5.53",
-                "squizlabs/php_codesniffer": "^3.13.4"
+                "phpstan/extension-installer": "^1.3.1",
+                "phpstan/phpstan": "^1.11.2",
+                "phpunit/phpunit": "^10.5.20",
+                "squizlabs/php_codesniffer": "^3.9.0"
             },
             "bin": [
@@ -2290,27 +2282,27 @@
                 }
             ],
-            "time": "2025-09-06T13:39:36+00:00"
+            "time": "2025-05-01T19:51:51+00:00"
         },
         {
             "name": "nette/schema",
-            "version": "v1.3.3",
+            "version": "v1.3.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/schema.git",
-                "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
-                "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
+                "reference": "da801d52f0354f70a638673c4a0f04e16529431d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
+                "reference": "da801d52f0354f70a638673c4a0f04e16529431d",
                 "shasum": ""
             },
             "require": {
                 "nette/utils": "^4.0",
-                "php": "8.1 - 8.5"
+                "php": "8.1 - 8.4"
             },
             "require-dev": {
                 "nette/tester": "^2.5.2",
-                "phpstan/phpstan-nette": "^2.0@stable",
+                "phpstan/phpstan-nette": "^1.0",
                 "tracy/tracy": "^2.8"
             },
@@ -2322,7 +2314,4 @@
             },
             "autoload": {
-                "psr-4": {
-                    "Nette\\": "src"
-                },
                 "classmap": [
                     "src/"
@@ -2353,24 +2342,24 @@
             "support": {
                 "issues": "https://github.com/nette/schema/issues",
-                "source": "https://github.com/nette/schema/tree/v1.3.3"
-            },
-            "time": "2025-10-30T22:57:59+00:00"
+                "source": "https://github.com/nette/schema/tree/v1.3.2"
+            },
+            "time": "2024-10-06T23:10:23+00:00"
         },
         {
             "name": "nette/utils",
-            "version": "v4.0.9",
+            "version": "v4.0.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nette/utils.git",
-                "reference": "505a30ad386daa5211f08a318e47015b501cad30"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nette/utils/zipball/505a30ad386daa5211f08a318e47015b501cad30",
-                "reference": "505a30ad386daa5211f08a318e47015b501cad30",
-                "shasum": ""
-            },
-            "require": {
-                "php": "8.0 - 8.5"
+                "reference": "ce708655043c7050eb050df361c5e313cf708309"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309",
+                "reference": "ce708655043c7050eb050df361c5e313cf708309",
+                "shasum": ""
+            },
+            "require": {
+                "php": "8.0 - 8.4"
             },
             "conflict": {
@@ -2379,7 +2368,7 @@
             },
             "require-dev": {
-                "jetbrains/phpstorm-attributes": "^1.2",
+                "jetbrains/phpstorm-attributes": "dev-master",
                 "nette/tester": "^2.5",
-                "phpstan/phpstan-nette": "^2.0@stable",
+                "phpstan/phpstan": "^1.0",
                 "tracy/tracy": "^2.9"
             },
@@ -2399,7 +2388,4 @@
             },
             "autoload": {
-                "psr-4": {
-                    "Nette\\": "src"
-                },
                 "classmap": [
                     "src/"
@@ -2442,20 +2428,20 @@
             "support": {
                 "issues": "https://github.com/nette/utils/issues",
-                "source": "https://github.com/nette/utils/tree/v4.0.9"
-            },
-            "time": "2025-10-31T00:45:47+00:00"
+                "source": "https://github.com/nette/utils/tree/v4.0.6"
+            },
+            "time": "2025-03-30T21:06:30+00:00"
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.6.2",
+            "version": "v5.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "3a454ca033b9e06b63282ce19562e892747449bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb",
-                "reference": "3a454ca033b9e06b63282ce19562e892747449bb",
+                "reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
+                "reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
                 "shasum": ""
             },
@@ -2476,5 +2462,5 @@
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.x-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
@@ -2500,20 +2486,20 @@
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2"
-            },
-            "time": "2025-10-21T19:32:17+00:00"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
+            },
+            "time": "2025-05-31T08:24:38+00:00"
         },
         {
             "name": "nunomaduro/termwind",
-            "version": "v2.3.3",
+            "version": "v2.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nunomaduro/termwind.git",
-                "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017",
-                "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017",
+                "reference": "dfa08f390e509967a15c22493dc0bac5733d9123"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123",
+                "reference": "dfa08f390e509967a15c22493dc0bac5733d9123",
                 "shasum": ""
             },
@@ -2521,14 +2507,14 @@
                 "ext-mbstring": "*",
                 "php": "^8.2",
-                "symfony/console": "^7.3.6"
-            },
-            "require-dev": {
-                "illuminate/console": "^11.46.1",
-                "laravel/pint": "^1.25.1",
+                "symfony/console": "^7.2.6"
+            },
+            "require-dev": {
+                "illuminate/console": "^11.44.7",
+                "laravel/pint": "^1.22.0",
                 "mockery/mockery": "^1.6.12",
-                "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3",
-                "phpstan/phpstan": "^1.12.32",
+                "pestphp/pest": "^2.36.0 || ^3.8.2",
+                "phpstan/phpstan": "^1.12.25",
                 "phpstan/phpstan-strict-rules": "^1.6.2",
-                "symfony/var-dumper": "^7.3.5",
+                "symfony/var-dumper": "^7.2.6",
                 "thecodingmachine/phpstan-strict-rules": "^1.0.0"
             },
@@ -2573,5 +2559,5 @@
             "support": {
                 "issues": "https://github.com/nunomaduro/termwind/issues",
-                "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3"
+                "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1"
             },
             "funding": [
@@ -2589,18 +2575,18 @@
                 }
             ],
-            "time": "2025-11-20T02:34:59+00:00"
+            "time": "2025-05-08T08:14:37+00:00"
         },
         {
             "name": "phpoption/phpoption",
-            "version": "1.9.4",
+            "version": "1.9.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/schmittjoh/php-option.git",
-                "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
-                "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
                 "shasum": ""
             },
@@ -2610,5 +2596,5 @@
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
             },
             "type": "library",
@@ -2652,5 +2638,5 @@
             "support": {
                 "issues": "https://github.com/schmittjoh/php-option/issues",
-                "source": "https://github.com/schmittjoh/php-option/tree/1.9.4"
+                "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
             },
             "funding": [
@@ -2664,5 +2650,5 @@
                 }
             ],
-            "time": "2025-08-21T11:53:16+00:00"
+            "time": "2024-07-20T21:41:07+00:00"
         },
         {
@@ -3080,14 +3066,14 @@
         {
             "name": "psy/psysh",
-            "version": "v0.12.15",
+            "version": "v0.12.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "38953bc71491c838fcb6ebcbdc41ab7483cd549c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/38953bc71491c838fcb6ebcbdc41ab7483cd549c",
-                "reference": "38953bc71491c838fcb6ebcbdc41ab7483cd549c",
+                "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625",
+                "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625",
                 "shasum": ""
             },
@@ -3104,10 +3090,9 @@
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2",
-                "composer/class-map-generator": "^1.6"
+                "bamarni/composer-bin-plugin": "^1.2"
             },
             "suggest": {
-                "composer/class-map-generator": "Improved tab completion performance with better class discovery.",
                 "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
                 "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
             },
@@ -3140,9 +3125,10 @@
                 {
                     "name": "Justin Hileman",
-                    "email": "justin@justinhileman.info"
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
                 }
             ],
             "description": "An interactive shell for modern PHP.",
-            "homepage": "https://psysh.org",
+            "homepage": "http://psysh.org",
             "keywords": [
                 "REPL",
@@ -3153,7 +3139,7 @@
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.12.15"
-            },
-            "time": "2025-11-28T00:00:14+00:00"
+                "source": "https://github.com/bobthecow/psysh/tree/v0.12.8"
+            },
+            "time": "2025-03-16T03:05:19+00:00"
         },
         {
@@ -3279,18 +3265,19 @@
         {
             "name": "ramsey/uuid",
-            "version": "4.9.1",
+            "version": "4.8.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ramsey/uuid.git",
-                "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440",
-                "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440",
-                "shasum": ""
-            },
-            "require": {
-                "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
+                "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28",
+                "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28",
+                "shasum": ""
+            },
+            "require": {
+                "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
+                "ext-json": "*",
                 "php": "^8.0",
                 "ramsey/collection": "^1.2 || ^2.0"
@@ -3351,20 +3338,20 @@
             "support": {
                 "issues": "https://github.com/ramsey/uuid/issues",
-                "source": "https://github.com/ramsey/uuid/tree/4.9.1"
-            },
-            "time": "2025-09-04T20:59:21+00:00"
+                "source": "https://github.com/ramsey/uuid/tree/4.8.1"
+            },
+            "time": "2025-06-01T06:28:46+00:00"
         },
         {
             "name": "symfony/clock",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/clock.git",
-                "reference": "9169f24776edde469914c1e7a1442a50f7a4e110"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110",
-                "reference": "9169f24776edde469914c1e7a1442a50f7a4e110",
+                "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
+                "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
                 "shasum": ""
             },
@@ -3411,5 +3398,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/clock/tree/v7.4.0"
+                "source": "https://github.com/symfony/clock/tree/v7.3.0"
             },
             "funding": [
@@ -3423,26 +3410,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-12T15:39:26+00:00"
+            "time": "2024-09-25T14:21:43+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8",
-                "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8",
+                "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44",
+                "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44",
                 "shasum": ""
             },
@@ -3452,5 +3435,5 @@
                 "symfony/polyfill-mbstring": "~1.0",
                 "symfony/service-contracts": "^2.5|^3",
-                "symfony/string": "^7.2|^8.0"
+                "symfony/string": "^7.2"
             },
             "conflict": {
@@ -3466,14 +3449,14 @@
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
-                "symfony/http-foundation": "^6.4|^7.0|^8.0",
-                "symfony/http-kernel": "^6.4|^7.0|^8.0",
-                "symfony/lock": "^6.4|^7.0|^8.0",
-                "symfony/messenger": "^6.4|^7.0|^8.0",
-                "symfony/process": "^6.4|^7.0|^8.0",
-                "symfony/stopwatch": "^6.4|^7.0|^8.0",
-                "symfony/var-dumper": "^6.4|^7.0|^8.0"
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/event-dispatcher": "^6.4|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/lock": "^6.4|^7.0",
+                "symfony/messenger": "^6.4|^7.0",
+                "symfony/process": "^6.4|^7.0",
+                "symfony/stopwatch": "^6.4|^7.0",
+                "symfony/var-dumper": "^6.4|^7.0"
             },
             "type": "library",
@@ -3509,5 +3492,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v7.4.0"
+                "source": "https://github.com/symfony/console/tree/v7.3.0"
             },
             "funding": [
@@ -3521,26 +3504,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-27T13:27:24+00:00"
+            "time": "2025-05-24T10:34:04+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135",
-                "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135",
+                "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+                "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
                 "shasum": ""
             },
@@ -3578,5 +3557,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/css-selector/tree/v7.4.0"
+                "source": "https://github.com/symfony/css-selector/tree/v7.3.0"
             },
             "funding": [
@@ -3590,13 +3569,9 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-10-30T13:39:42+00:00"
+            "time": "2024-09-25T14:21:43+00:00"
         },
         {
@@ -3668,31 +3643,40 @@
         },
         {
-            "name": "symfony/dom-crawler",
-            "version": "v7.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "8f3e7464fe7e77294686e935956a6a8ccf7442c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8f3e7464fe7e77294686e935956a6a8ccf7442c4",
-                "reference": "8f3e7464fe7e77294686e935956a6a8ccf7442c4",
-                "shasum": ""
-            },
-            "require": {
-                "masterminds/html5": "^2.6",
+            "name": "symfony/error-handler",
+            "version": "v7.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/error-handler.git",
+                "reference": "cf68d225bc43629de4ff54778029aee6dc191b83"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83",
+                "reference": "cf68d225bc43629de4ff54778029aee6dc191b83",
+                "shasum": ""
+            },
+            "require": {
                 "php": ">=8.2",
+                "psr/log": "^1|^2|^3",
+                "symfony/var-dumper": "^6.4|^7.0"
+            },
+            "conflict": {
+                "symfony/deprecation-contracts": "<2.5",
+                "symfony/http-kernel": "<6.4"
+            },
+            "require-dev": {
+                "symfony/console": "^6.4|^7.0",
                 "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "^6.4|^7.0|^8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/serializer": "^6.4|^7.0",
+                "symfony/webpack-encore-bundle": "^1.0|^2.0"
+            },
+            "bin": [
+                "Resources/bin/patch-type-declarations"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\ErrorHandler\\": ""
                 },
                 "exclude-from-classmap": [
@@ -3714,8 +3698,8 @@
                 }
             ],
-            "description": "Eases DOM navigation for HTML and XML documents",
+            "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dom-crawler/tree/v7.4.0"
+                "source": "https://github.com/symfony/error-handler/tree/v7.3.0"
             },
             "funding": [
@@ -3729,52 +3713,50 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-10-31T09:30:03+00:00"
-        },
-        {
-            "name": "symfony/error-handler",
-            "version": "v7.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/error-handler.git",
-                "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2",
-                "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2",
+            "time": "2025-05-29T07:19:49+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v7.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "497f73ac996a598c92409b44ac43b6690c4f666d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d",
+                "reference": "497f73ac996a598c92409b44ac43b6690c4f666d",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.2",
+                "symfony/event-dispatcher-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<6.4",
+                "symfony/service-contracts": "<2.5"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0|3.0"
+            },
+            "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/polyfill-php85": "^1.32",
-                "symfony/var-dumper": "^6.4|^7.0|^8.0"
-            },
-            "conflict": {
-                "symfony/deprecation-contracts": "<2.5",
-                "symfony/http-kernel": "<6.4"
-            },
-            "require-dev": {
-                "symfony/console": "^6.4|^7.0|^8.0",
-                "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/http-kernel": "^6.4|^7.0|^8.0",
-                "symfony/serializer": "^6.4|^7.0|^8.0",
-                "symfony/webpack-encore-bundle": "^1.0|^2.0"
-            },
-            "bin": [
-                "Resources/bin/patch-type-declarations"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\ErrorHandler\\": ""
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/stopwatch": "^6.4|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
@@ -3796,8 +3778,8 @@
                 }
             ],
-            "description": "Provides tools to manage errors and ease debugging PHP code",
+            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v7.4.0"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0"
             },
             "funding": [
@@ -3811,98 +3793,9 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-05T14:29:59+00:00"
-        },
-        {
-            "name": "symfony/event-dispatcher",
-            "version": "v7.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d",
-                "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.2",
-                "symfony/event-dispatcher-contracts": "^2.5|^3"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<6.4",
-                "symfony/service-contracts": "<2.5"
-            },
-            "provide": {
-                "psr/event-dispatcher-implementation": "1.0",
-                "symfony/event-dispatcher-implementation": "2.0|3.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/error-handler": "^6.4|^7.0|^8.0",
-                "symfony/expression-language": "^6.4|^7.0|^8.0",
-                "symfony/framework-bundle": "^6.4|^7.0|^8.0",
-                "symfony/http-foundation": "^6.4|^7.0|^8.0",
-                "symfony/service-contracts": "^2.5|^3",
-                "symfony/stopwatch": "^6.4|^7.0|^8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-10-28T09:38:46+00:00"
+            "time": "2025-04-22T09:11:45+00:00"
         },
         {
@@ -3984,14 +3877,14 @@
         {
             "name": "symfony/finder",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "340b9ed7320570f319028a2cbec46d40535e94bd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/340b9ed7320570f319028a2cbec46d40535e94bd",
-                "reference": "340b9ed7320570f319028a2cbec46d40535e94bd",
+                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
+                "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
                 "shasum": ""
             },
@@ -4000,5 +3893,5 @@
             },
             "require-dev": {
-                "symfony/filesystem": "^6.4|^7.0|^8.0"
+                "symfony/filesystem": "^6.4|^7.0"
             },
             "type": "library",
@@ -4028,5 +3921,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v7.4.0"
+                "source": "https://github.com/symfony/finder/tree/v7.3.0"
             },
             "funding": [
@@ -4040,32 +3933,29 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-05T05:42:40+00:00"
+            "time": "2024-12-30T19:00:26+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "769c1720b68e964b13b58529c17d4a385c62167b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/769c1720b68e964b13b58529c17d4a385c62167b",
-                "reference": "769c1720b68e964b13b58529c17d4a385c62167b",
+                "reference": "4236baf01609667d53b20371486228231eb135fd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd",
+                "reference": "4236baf01609667d53b20371486228231eb135fd",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.2",
-                "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/polyfill-mbstring": "^1.1"
+                "symfony/deprecation-contracts": "^2.5|^3.0",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php83": "^1.27"
             },
             "conflict": {
@@ -4076,11 +3966,11 @@
                 "doctrine/dbal": "^3.6|^4",
                 "predis/predis": "^1.1|^2.0",
-                "symfony/cache": "^6.4.12|^7.1.5|^8.0",
-                "symfony/clock": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/expression-language": "^6.4|^7.0|^8.0",
-                "symfony/http-kernel": "^6.4|^7.0|^8.0",
-                "symfony/mime": "^6.4|^7.0|^8.0",
-                "symfony/rate-limiter": "^6.4|^7.0|^8.0"
+                "symfony/cache": "^6.4.12|^7.1.5",
+                "symfony/clock": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/mime": "^6.4|^7.0",
+                "symfony/rate-limiter": "^6.4|^7.0"
             },
             "type": "library",
@@ -4110,5 +4000,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v7.4.0"
+                "source": "https://github.com/symfony/http-foundation/tree/v7.3.0"
             },
             "funding": [
@@ -4122,26 +4012,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-13T08:49:24+00:00"
+            "time": "2025-05-12T14:48:23+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "7348193cd384495a755554382e4526f27c456085"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7348193cd384495a755554382e4526f27c456085",
-                "reference": "7348193cd384495a755554382e4526f27c456085",
+                "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f",
+                "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f",
                 "shasum": ""
             },
@@ -4150,7 +4036,7 @@
                 "psr/log": "^1|^2|^3",
                 "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/error-handler": "^6.4|^7.0|^8.0",
-                "symfony/event-dispatcher": "^7.3|^8.0",
-                "symfony/http-foundation": "^7.4|^8.0",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/event-dispatcher": "^7.3",
+                "symfony/http-foundation": "^7.3",
                 "symfony/polyfill-ctype": "^1.8"
             },
@@ -4162,5 +4048,4 @@
                 "symfony/dependency-injection": "<6.4",
                 "symfony/doctrine-bridge": "<6.4",
-                "symfony/flex": "<2.10",
                 "symfony/form": "<6.4",
                 "symfony/http-client": "<6.4",
@@ -4180,25 +4065,25 @@
             "require-dev": {
                 "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^6.4|^7.0|^8.0",
-                "symfony/clock": "^6.4|^7.0|^8.0",
-                "symfony/config": "^6.4|^7.0|^8.0",
-                "symfony/console": "^6.4|^7.0|^8.0",
-                "symfony/css-selector": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/dom-crawler": "^6.4|^7.0|^8.0",
-                "symfony/expression-language": "^6.4|^7.0|^8.0",
-                "symfony/finder": "^6.4|^7.0|^8.0",
+                "symfony/browser-kit": "^6.4|^7.0",
+                "symfony/clock": "^6.4|^7.0",
+                "symfony/config": "^6.4|^7.0",
+                "symfony/console": "^6.4|^7.0",
+                "symfony/css-selector": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/dom-crawler": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/finder": "^6.4|^7.0",
                 "symfony/http-client-contracts": "^2.5|^3",
-                "symfony/process": "^6.4|^7.0|^8.0",
-                "symfony/property-access": "^7.1|^8.0",
-                "symfony/routing": "^6.4|^7.0|^8.0",
-                "symfony/serializer": "^7.1|^8.0",
-                "symfony/stopwatch": "^6.4|^7.0|^8.0",
-                "symfony/translation": "^6.4|^7.0|^8.0",
+                "symfony/process": "^6.4|^7.0",
+                "symfony/property-access": "^7.1",
+                "symfony/routing": "^6.4|^7.0",
+                "symfony/serializer": "^7.1",
+                "symfony/stopwatch": "^6.4|^7.0",
+                "symfony/translation": "^6.4|^7.0",
                 "symfony/translation-contracts": "^2.5|^3",
-                "symfony/uid": "^6.4|^7.0|^8.0",
-                "symfony/validator": "^6.4|^7.0|^8.0",
-                "symfony/var-dumper": "^6.4|^7.0|^8.0",
-                "symfony/var-exporter": "^6.4|^7.0|^8.0",
+                "symfony/uid": "^6.4|^7.0",
+                "symfony/validator": "^6.4|^7.0",
+                "symfony/var-dumper": "^6.4|^7.0",
+                "symfony/var-exporter": "^6.4|^7.0",
                 "twig/twig": "^3.12"
             },
@@ -4229,5 +4114,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v7.4.0"
+                "source": "https://github.com/symfony/http-kernel/tree/v7.3.0"
             },
             "funding": [
@@ -4241,26 +4126,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-27T13:38:24+00:00"
+            "time": "2025-05-29T07:47:32+00:00"
         },
         {
             "name": "symfony/mailer",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mailer.git",
-                "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mailer/zipball/a3d9eea8cfa467ece41f0f54ba28185d74bd53fd",
-                "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd",
+                "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c",
+                "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c",
                 "shasum": ""
             },
@@ -4270,6 +4151,6 @@
                 "psr/event-dispatcher": "^1",
                 "psr/log": "^1|^2|^3",
-                "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
-                "symfony/mime": "^7.2|^8.0",
+                "symfony/event-dispatcher": "^6.4|^7.0",
+                "symfony/mime": "^7.2",
                 "symfony/service-contracts": "^2.5|^3"
             },
@@ -4282,8 +4163,8 @@
             },
             "require-dev": {
-                "symfony/console": "^6.4|^7.0|^8.0",
-                "symfony/http-client": "^6.4|^7.0|^8.0",
-                "symfony/messenger": "^6.4|^7.0|^8.0",
-                "symfony/twig-bridge": "^6.4|^7.0|^8.0"
+                "symfony/console": "^6.4|^7.0",
+                "symfony/http-client": "^6.4|^7.0",
+                "symfony/messenger": "^6.4|^7.0",
+                "symfony/twig-bridge": "^6.4|^7.0"
             },
             "type": "library",
@@ -4313,5 +4194,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/mailer/tree/v7.4.0"
+                "source": "https://github.com/symfony/mailer/tree/v7.3.0"
             },
             "funding": [
@@ -4325,31 +4206,26 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-21T15:26:00+00:00"
+            "time": "2025-04-04T09:51:09+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a",
-                "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a",
+                "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
+                "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.2",
-                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-intl-idn": "^1.10",
                 "symfony/polyfill-mbstring": "^1.0"
@@ -4366,9 +4242,9 @@
                 "league/html-to-markdown": "^5.0",
                 "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/process": "^6.4|^7.0|^8.0",
-                "symfony/property-access": "^6.4|^7.0|^8.0",
-                "symfony/property-info": "^6.4|^7.0|^8.0",
-                "symfony/serializer": "^6.4.3|^7.0.3|^8.0"
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/process": "^6.4|^7.0",
+                "symfony/property-access": "^6.4|^7.0",
+                "symfony/property-info": "^6.4|^7.0",
+                "symfony/serializer": "^6.4.3|^7.0.3"
             },
             "type": "library",
@@ -4402,5 +4278,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v7.4.0"
+                "source": "https://github.com/symfony/mime/tree/v7.3.0"
             },
             "funding": [
@@ -4414,17 +4290,13 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-16T10:14:42+00:00"
+            "time": "2025-02-19T08:51:26+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
@@ -4485,5 +4357,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
             },
             "funding": [
@@ -4497,8 +4369,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -4509,14 +4377,14 @@
         {
             "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
-                "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
                 "shasum": ""
             },
@@ -4567,5 +4435,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
             },
             "funding": [
@@ -4579,17 +4447,13 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-06-27T09:58:17+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
@@ -4654,5 +4518,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0"
             },
             "funding": [
@@ -4666,8 +4530,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -4678,5 +4538,5 @@
         {
             "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
@@ -4739,5 +4599,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
             },
             "funding": [
@@ -4751,8 +4611,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -4763,5 +4619,5 @@
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
@@ -4824,5 +4680,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
             },
             "funding": [
@@ -4836,8 +4692,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -4848,5 +4700,5 @@
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
@@ -4908,5 +4760,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
             },
             "funding": [
@@ -4920,8 +4772,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -4932,14 +4780,14 @@
         {
             "name": "symfony/polyfill-php83",
-            "version": "v1.33.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
-                "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
                 "shasum": ""
             },
@@ -4988,5 +4836,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
             },
             "funding": [
@@ -5000,30 +4848,32 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-07-08T02:45:35+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php84",
-            "version": "v1.33.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php84.git",
-                "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
-                "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-uuid",
+            "version": "v1.32.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-uuid.git",
+                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2"
+            },
+            "provide": {
+                "ext-uuid": "*"
+            },
+            "suggest": {
+                "ext-uuid": "For best performance"
             },
             "type": "library",
@@ -5039,170 +4889,4 @@
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php84\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-06-24T13:30:11+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php85",
-            "version": "v1.33.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php85.git",
-                "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
-                "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php85\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-06-23T16:12:55+00:00"
-        },
-        {
-            "name": "symfony/polyfill-uuid",
-            "version": "v1.33.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-uuid.git",
-                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
-                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "provide": {
-                "ext-uuid": "*"
-            },
-            "suggest": {
-                "ext-uuid": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
                     "Symfony\\Polyfill\\Uuid\\": ""
                 }
@@ -5231,5 +4915,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
+                "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0"
             },
             "funding": [
@@ -5243,8 +4927,4 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
@@ -5255,14 +4935,14 @@
         {
             "name": "symfony/process",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8",
-                "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8",
+                "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
+                "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
                 "shasum": ""
             },
@@ -5296,5 +4976,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v7.4.0"
+                "source": "https://github.com/symfony/process/tree/v7.3.0"
             },
             "funding": [
@@ -5308,26 +4988,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-10-16T11:21:06+00:00"
+            "time": "2025-04-17T09:11:12+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "4720254cb2644a0b876233d258a32bf017330db7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/4720254cb2644a0b876233d258a32bf017330db7",
-                "reference": "4720254cb2644a0b876233d258a32bf017330db7",
+                "reference": "8e213820c5fea844ecea29203d2a308019007c15"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15",
+                "reference": "8e213820c5fea844ecea29203d2a308019007c15",
                 "shasum": ""
             },
@@ -5343,9 +5019,9 @@
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/expression-language": "^6.4|^7.0|^8.0",
-                "symfony/http-foundation": "^6.4|^7.0|^8.0",
-                "symfony/yaml": "^6.4|^7.0|^8.0"
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/yaml": "^6.4|^7.0"
             },
             "type": "library",
@@ -5381,5 +5057,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v7.4.0"
+                "source": "https://github.com/symfony/routing/tree/v7.3.0"
             },
             "funding": [
@@ -5393,26 +5069,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-27T13:27:24+00:00"
+            "time": "2025-05-24T20:43:28+00:00"
         },
         {
             "name": "symfony/service-contracts",
-            "version": "v3.6.1",
+            "version": "v3.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
-                "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
+                "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+                "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
                 "shasum": ""
             },
@@ -5468,5 +5140,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
+                "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
             },
             "funding": [
@@ -5480,33 +5152,28 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-07-15T11:30:57+00:00"
+            "time": "2025-04-25T09:37:31+00:00"
         },
         {
             "name": "symfony/string",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003",
-                "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003",
+                "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125",
+                "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.2",
-                "symfony/deprecation-contracts": "^2.5|^3.0",
                 "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-intl-grapheme": "~1.33",
+                "symfony/polyfill-intl-grapheme": "~1.0",
                 "symfony/polyfill-intl-normalizer": "~1.0",
                 "symfony/polyfill-mbstring": "~1.0"
@@ -5516,9 +5183,10 @@
             },
             "require-dev": {
-                "symfony/emoji": "^7.1|^8.0",
-                "symfony/http-client": "^6.4|^7.0|^8.0",
-                "symfony/intl": "^6.4|^7.0|^8.0",
+                "symfony/emoji": "^7.1",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/http-client": "^6.4|^7.0",
+                "symfony/intl": "^6.4|^7.0",
                 "symfony/translation-contracts": "^2.5|^3.0",
-                "symfony/var-exporter": "^6.4|^7.0|^8.0"
+                "symfony/var-exporter": "^6.4|^7.0"
             },
             "type": "library",
@@ -5559,5 +5227,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v7.4.0"
+                "source": "https://github.com/symfony/string/tree/v7.3.0"
             },
             "funding": [
@@ -5571,26 +5239,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-27T13:27:24+00:00"
+            "time": "2025-04-20T20:19:01+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/2d01ca0da3f092f91eeedb46f24aa30d2fca8f68",
-                "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68",
+                "reference": "4aba29076a29a3aa667e09b791e5f868973a8667"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667",
+                "reference": "4aba29076a29a3aa667e09b791e5f868973a8667",
                 "shasum": ""
             },
@@ -5599,5 +5263,5 @@
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/translation-contracts": "^2.5.3|^3.3"
+                "symfony/translation-contracts": "^2.5|^3.0"
             },
             "conflict": {
@@ -5618,15 +5282,15 @@
                 "nikic/php-parser": "^5.0",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^6.4|^7.0|^8.0",
-                "symfony/console": "^6.4|^7.0|^8.0",
-                "symfony/dependency-injection": "^6.4|^7.0|^8.0",
-                "symfony/finder": "^6.4|^7.0|^8.0",
+                "symfony/config": "^6.4|^7.0",
+                "symfony/console": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/finder": "^6.4|^7.0",
                 "symfony/http-client-contracts": "^2.5|^3.0",
-                "symfony/http-kernel": "^6.4|^7.0|^8.0",
-                "symfony/intl": "^6.4|^7.0|^8.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/intl": "^6.4|^7.0",
                 "symfony/polyfill-intl-icu": "^1.21",
-                "symfony/routing": "^6.4|^7.0|^8.0",
+                "symfony/routing": "^6.4|^7.0",
                 "symfony/service-contracts": "^2.5|^3",
-                "symfony/yaml": "^6.4|^7.0|^8.0"
+                "symfony/yaml": "^6.4|^7.0"
             },
             "type": "library",
@@ -5659,5 +5323,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v7.4.0"
+                "source": "https://github.com/symfony/translation/tree/v7.3.0"
             },
             "funding": [
@@ -5671,26 +5335,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-27T13:27:24+00:00"
+            "time": "2025-05-29T07:19:49+00:00"
         },
         {
             "name": "symfony/translation-contracts",
-            "version": "v3.6.1",
+            "version": "v3.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
-                "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
+                "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
+                "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
                 "shasum": ""
             },
@@ -5741,5 +5401,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0"
             },
             "funding": [
@@ -5753,26 +5413,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-07-15T13:41:35+00:00"
+            "time": "2024-09-27T08:32:26+00:00"
         },
         {
             "name": "symfony/uid",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/uid.git",
-                "reference": "2498e9f81b7baa206f44de583f2f48350b90142c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c",
-                "reference": "2498e9f81b7baa206f44de583f2f48350b90142c",
+                "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3",
+                "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3",
                 "shasum": ""
             },
@@ -5782,5 +5438,5 @@
             },
             "require-dev": {
-                "symfony/console": "^6.4|^7.0|^8.0"
+                "symfony/console": "^6.4|^7.0"
             },
             "type": "library",
@@ -5819,5 +5475,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/uid/tree/v7.4.0"
+                "source": "https://github.com/symfony/uid/tree/v7.3.0"
             },
             "funding": [
@@ -5831,26 +5487,22 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-09-25T11:02:55+00:00"
+            "time": "2025-05-24T14:28:13+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41fd6c4ae28c38b294b42af6db61446594a0dece",
-                "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece",
+                "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e",
+                "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e",
                 "shasum": ""
             },
@@ -5864,8 +5516,9 @@
             },
             "require-dev": {
-                "symfony/console": "^6.4|^7.0|^8.0",
-                "symfony/http-kernel": "^6.4|^7.0|^8.0",
-                "symfony/process": "^6.4|^7.0|^8.0",
-                "symfony/uid": "^6.4|^7.0|^8.0",
+                "ext-iconv": "*",
+                "symfony/console": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/process": "^6.4|^7.0",
+                "symfony/uid": "^6.4|^7.0",
                 "twig/twig": "^3.12"
             },
@@ -5906,5 +5559,5 @@
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v7.4.0"
+                "source": "https://github.com/symfony/var-dumper/tree/v7.3.0"
             },
             "funding": [
@@ -5918,13 +5571,79 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-10-27T20:36:44+00:00"
+            "time": "2025-04-27T18:39:23+00:00"
+        },
+        {
+            "name": "tightenco/ziggy",
+            "version": "v2.5.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/tighten/ziggy.git",
+                "reference": "0b3b521d2c55fbdb04b6721532f7f5f49d32f52b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/tighten/ziggy/zipball/0b3b521d2c55fbdb04b6721532f7f5f49d32f52b",
+                "reference": "0b3b521d2c55fbdb04b6721532f7f5f49d32f52b",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "laravel/framework": ">=9.0",
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "laravel/folio": "^1.1",
+                "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0",
+                "pestphp/pest": "^2.26|^3.0",
+                "pestphp/pest-plugin-laravel": "^2.4|^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Tighten\\Ziggy\\ZiggyServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Tighten\\Ziggy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniel Coulbourne",
+                    "email": "daniel@tighten.co"
+                },
+                {
+                    "name": "Jake Bathman",
+                    "email": "jake@tighten.co"
+                },
+                {
+                    "name": "Jacob Baker-Kretzmar",
+                    "email": "jacob@tighten.co"
+                }
+            ],
+            "description": "Use your Laravel named routes in JavaScript.",
+            "homepage": "https://github.com/tighten/ziggy",
+            "keywords": [
+                "Ziggy",
+                "javascript",
+                "laravel",
+                "routes"
+            ],
+            "support": {
+                "issues": "https://github.com/tighten/ziggy/issues",
+                "source": "https://github.com/tighten/ziggy/tree/v2.5.3"
+            },
+            "time": "2025-05-17T18:15:19+00:00"
         },
         {
@@ -6140,7 +5859,206 @@
             ],
             "time": "2024-11-21T01:49:47+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozarts/assert.git",
+                "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+                "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<4.6.1 || 4.6.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5.13"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "support": {
+                "issues": "https://github.com/webmozarts/assert/issues",
+                "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+            },
+            "time": "2022-06-03T18:03:27+00:00"
         }
     ],
     "packages-dev": [
+        {
+            "name": "brianium/paratest",
+            "version": "v7.8.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paratestphp/paratest.git",
+                "reference": "a585c346ddf1bec22e51e20b5387607905604a71"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paratestphp/paratest/zipball/a585c346ddf1bec22e51e20b5387607905604a71",
+                "reference": "a585c346ddf1bec22e51e20b5387607905604a71",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-pcre": "*",
+                "ext-reflection": "*",
+                "ext-simplexml": "*",
+                "fidry/cpu-core-counter": "^1.2.0",
+                "jean85/pretty-package-versions": "^2.1.0",
+                "php": "~8.2.0 || ~8.3.0 || ~8.4.0",
+                "phpunit/php-code-coverage": "^11.0.9 || ^12.0.4",
+                "phpunit/php-file-iterator": "^5.1.0 || ^6",
+                "phpunit/php-timer": "^7.0.1 || ^8",
+                "phpunit/phpunit": "^11.5.11 || ^12.0.6",
+                "sebastian/environment": "^7.2.0 || ^8",
+                "symfony/console": "^6.4.17 || ^7.2.1",
+                "symfony/process": "^6.4.19 || ^7.2.4"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12.0.0",
+                "ext-pcov": "*",
+                "ext-posix": "*",
+                "phpstan/phpstan": "^2.1.6",
+                "phpstan/phpstan-deprecation-rules": "^2.0.1",
+                "phpstan/phpstan-phpunit": "^2.0.4",
+                "phpstan/phpstan-strict-rules": "^2.0.3",
+                "squizlabs/php_codesniffer": "^3.11.3",
+                "symfony/filesystem": "^6.4.13 || ^7.2.0"
+            },
+            "bin": [
+                "bin/paratest",
+                "bin/paratest_for_phpstorm"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ParaTest\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Scaturro",
+                    "email": "scaturrob@gmail.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Filippo Tessarotto",
+                    "email": "zoeslam@gmail.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Parallel testing for PHP",
+            "homepage": "https://github.com/paratestphp/paratest",
+            "keywords": [
+                "concurrent",
+                "parallel",
+                "phpunit",
+                "testing"
+            ],
+            "support": {
+                "issues": "https://github.com/paratestphp/paratest/issues",
+                "source": "https://github.com/paratestphp/paratest/tree/v7.8.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sponsors/Slamdunk",
+                    "type": "github"
+                },
+                {
+                    "url": "https://paypal.me/filippotessarotto",
+                    "type": "paypal"
+                }
+            ],
+            "time": "2025-03-05T08:29:11+00:00"
+        },
+        {
+            "name": "doctrine/deprecations",
+            "version": "1.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/deprecations.git",
+                "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+                "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<=7.5 || >=13"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^9 || ^12 || ^13",
+                "phpstan/phpstan": "1.4.10 || 2.1.11",
+                "phpstan/phpstan-phpunit": "^1.0 || ^2",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+                "psr/log": "^1 || ^2 || ^3"
+            },
+            "suggest": {
+                "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Deprecations\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+            "homepage": "https://www.doctrine-project.org/",
+            "support": {
+                "issues": "https://github.com/doctrine/deprecations/issues",
+                "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+            },
+            "time": "2025-04-07T20:06:18+00:00"
+        },
         {
             "name": "fakerphp/faker",
@@ -6207,15 +6125,76 @@
         },
         {
+            "name": "fidry/cpu-core-counter",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theofidry/cpu-core-counter.git",
+                "reference": "8520451a140d3f46ac33042715115e290cf5785f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
+                "reference": "8520451a140d3f46ac33042715115e290cf5785f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "fidry/makefile": "^0.2.0",
+                "fidry/php-cs-fixer-config": "^1.1.2",
+                "phpstan/extension-installer": "^1.2.0",
+                "phpstan/phpstan": "^1.9.2",
+                "phpstan/phpstan-deprecation-rules": "^1.0.0",
+                "phpstan/phpstan-phpunit": "^1.2.2",
+                "phpstan/phpstan-strict-rules": "^1.4.4",
+                "phpunit/phpunit": "^8.5.31 || ^9.5.26",
+                "webmozarts/strict-phpunit": "^7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Fidry\\CpuCoreCounter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Théo FIDRY",
+                    "email": "theo.fidry@gmail.com"
+                }
+            ],
+            "description": "Tiny utility to get the number of CPU cores.",
+            "keywords": [
+                "CPU",
+                "core"
+            ],
+            "support": {
+                "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theofidry",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-08-06T10:04:20+00:00"
+        },
+        {
             "name": "filp/whoops",
-            "version": "2.18.4",
+            "version": "2.18.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/filp/whoops.git",
-                "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
-                "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+                "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
+                "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
                 "shasum": ""
             },
@@ -6267,5 +6246,5 @@
             "support": {
                 "issues": "https://github.com/filp/whoops/issues",
-                "source": "https://github.com/filp/whoops/tree/2.18.4"
+                "source": "https://github.com/filp/whoops/tree/2.18.0"
             },
             "funding": [
@@ -6275,5 +6254,5 @@
                 }
             ],
-            "time": "2025-08-08T12:00:00+00:00"
+            "time": "2025-03-15T12:00:00+00:00"
         },
         {
@@ -6329,41 +6308,38 @@
         },
         {
-            "name": "laravel/breeze",
-            "version": "v2.3.8",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/laravel/breeze.git",
-                "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/breeze/zipball/1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
-                "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
-                "shasum": ""
-            },
-            "require": {
-                "illuminate/console": "^11.0|^12.0",
-                "illuminate/filesystem": "^11.0|^12.0",
-                "illuminate/support": "^11.0|^12.0",
-                "illuminate/validation": "^11.0|^12.0",
-                "php": "^8.2.0",
-                "symfony/console": "^7.0"
-            },
-            "require-dev": {
-                "laravel/framework": "^11.0|^12.0",
-                "orchestra/testbench-core": "^9.0|^10.0",
-                "phpstan/phpstan": "^2.0"
+            "name": "jean85/pretty-package-versions",
+            "version": "2.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Jean85/pretty-package-versions.git",
+                "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
+                "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
+                "shasum": ""
+            },
+            "require": {
+                "composer-runtime-api": "^2.1.0",
+                "php": "^7.4|^8.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.2",
+                "jean85/composer-provided-replaced-stub-package": "^1.0",
+                "phpstan/phpstan": "^2.0",
+                "phpunit/phpunit": "^7.5|^8.5|^9.6",
+                "rector/rector": "^2.0",
+                "vimeo/psalm": "^4.3 || ^5.0"
             },
             "type": "library",
             "extra": {
-                "laravel": {
-                    "providers": [
-                        "Laravel\\Breeze\\BreezeServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Laravel\\Breeze\\": "src/"
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Jean85\\": "src/"
                 }
             },
@@ -6374,31 +6350,33 @@
             "authors": [
                 {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
-                }
-            ],
-            "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.",
-            "keywords": [
-                "auth",
-                "laravel"
-            ],
-            "support": {
-                "issues": "https://github.com/laravel/breeze/issues",
-                "source": "https://github.com/laravel/breeze"
-            },
-            "time": "2025-07-18T18:49:59+00:00"
+                    "name": "Alessandro Lai",
+                    "email": "alessandro.lai85@gmail.com"
+                }
+            ],
+            "description": "A library to get pretty versions strings of installed dependencies",
+            "keywords": [
+                "composer",
+                "package",
+                "release",
+                "versions"
+            ],
+            "support": {
+                "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+                "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
+            },
+            "time": "2025-03-19T14:43:43+00:00"
         },
         {
             "name": "laravel/pail",
-            "version": "v1.2.4",
+            "version": "v1.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/pail.git",
-                "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/pail/zipball/49f92285ff5d6fc09816e976a004f8dec6a0ea30",
-                "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30",
+                "reference": "f31f4980f52be17c4667f3eafe034e6826787db2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/pail/zipball/f31f4980f52be17c4667f3eafe034e6826787db2",
+                "reference": "f31f4980f52be17c4667f3eafe034e6826787db2",
                 "shasum": ""
             },
@@ -6417,8 +6395,8 @@
                 "laravel/framework": "^10.24|^11.0|^12.0",
                 "laravel/pint": "^1.13",
-                "orchestra/testbench-core": "^8.13|^9.17|^10.8",
-                "pestphp/pest": "^2.20|^3.0|^4.0",
-                "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0",
-                "phpstan/phpstan": "^1.12.27",
+                "orchestra/testbench-core": "^8.13|^9.0|^10.0",
+                "pestphp/pest": "^2.20|^3.0",
+                "pestphp/pest-plugin-type-coverage": "^2.3|^3.0",
+                "phpstan/phpstan": "^1.10",
                 "symfony/var-dumper": "^6.3|^7.0"
             },
@@ -6456,5 +6434,4 @@
             "homepage": "https://github.com/laravel/pail",
             "keywords": [
-                "dev",
                 "laravel",
                 "logs",
@@ -6466,18 +6443,18 @@
                 "source": "https://github.com/laravel/pail"
             },
-            "time": "2025-11-20T16:29:35+00:00"
+            "time": "2025-01-28T15:15:15+00:00"
         },
         {
             "name": "laravel/pint",
-            "version": "v1.26.0",
+            "version": "v1.22.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/pint.git",
-                "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/pint/zipball/69dcca060ecb15e4b564af63d1f642c81a241d6f",
-                "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f",
+                "reference": "941d1927c5ca420c22710e98420287169c7bcaf7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/pint/zipball/941d1927c5ca420c22710e98420287169c7bcaf7",
+                "reference": "941d1927c5ca420c22710e98420287169c7bcaf7",
                 "shasum": ""
             },
@@ -6490,11 +6467,11 @@
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.90.0",
-                "illuminate/view": "^12.40.1",
-                "larastan/larastan": "^3.8.0",
-                "laravel-zero/framework": "^12.0.4",
+                "friendsofphp/php-cs-fixer": "^3.75.0",
+                "illuminate/view": "^11.44.7",
+                "larastan/larastan": "^3.4.0",
+                "laravel-zero/framework": "^11.36.1",
                 "mockery/mockery": "^1.6.12",
-                "nunomaduro/termwind": "^2.3.3",
-                "pestphp/pest": "^3.8.4"
+                "nunomaduro/termwind": "^2.3.1",
+                "pestphp/pest": "^2.36.0"
             },
             "bin": [
@@ -6522,5 +6499,4 @@
             "homepage": "https://laravel.com",
             "keywords": [
-                "dev",
                 "format",
                 "formatter",
@@ -6533,18 +6509,18 @@
                 "source": "https://github.com/laravel/pint"
             },
-            "time": "2025-11-25T21:15:52+00:00"
+            "time": "2025-05-08T08:38:12+00:00"
         },
         {
             "name": "laravel/sail",
-            "version": "v1.48.1",
+            "version": "v1.43.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/sail.git",
-                "reference": "ef122b223f5fca5e5d88bda5127c846710886329"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/laravel/sail/zipball/ef122b223f5fca5e5d88bda5127c846710886329",
-                "reference": "ef122b223f5fca5e5d88bda5127c846710886329",
+                "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/sail/zipball/3e7d899232a8c5e3ea4fc6dee7525ad583887e72",
+                "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72",
                 "shasum": ""
             },
@@ -6559,5 +6535,5 @@
             "require-dev": {
                 "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
-                "phpstan/phpstan": "^2.0"
+                "phpstan/phpstan": "^1.10"
             },
             "bin": [
@@ -6596,5 +6572,5 @@
                 "source": "https://github.com/laravel/sail"
             },
-            "time": "2025-11-17T22:05:34+00:00"
+            "time": "2025-05-19T13:19:21+00:00"
         },
         {
@@ -6683,14 +6659,14 @@
         {
             "name": "myclabs/deep-copy",
-            "version": "1.13.4",
+            "version": "1.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
-                "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+                "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
+                "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
                 "shasum": ""
             },
@@ -6731,5 +6707,5 @@
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
             },
             "funding": [
@@ -6739,25 +6715,25 @@
                 }
             ],
-            "time": "2025-08-01T08:46:24+00:00"
+            "time": "2025-04-29T12:36:36+00:00"
         },
         {
             "name": "nunomaduro/collision",
-            "version": "v8.8.3",
+            "version": "v8.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nunomaduro/collision.git",
-                "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
-                "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
-                "shasum": ""
-            },
-            "require": {
-                "filp/whoops": "^2.18.1",
-                "nunomaduro/termwind": "^2.3.1",
+                "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/4cf9f3b47afff38b139fb79ce54fc71799022ce8",
+                "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8",
+                "shasum": ""
+            },
+            "require": {
+                "filp/whoops": "^2.18.0",
+                "nunomaduro/termwind": "^2.3.0",
                 "php": "^8.2.0",
-                "symfony/console": "^7.3.0"
+                "symfony/console": "^7.2.5"
             },
             "conflict": {
@@ -6767,13 +6743,13 @@
             "require-dev": {
                 "brianium/paratest": "^7.8.3",
-                "larastan/larastan": "^3.4.2",
-                "laravel/framework": "^11.44.2 || ^12.18",
-                "laravel/pint": "^1.22.1",
-                "laravel/sail": "^1.43.1",
-                "laravel/sanctum": "^4.1.1",
+                "larastan/larastan": "^3.2",
+                "laravel/framework": "^11.44.2 || ^12.6",
+                "laravel/pint": "^1.21.2",
+                "laravel/sail": "^1.41.0",
+                "laravel/sanctum": "^4.0.8",
                 "laravel/tinker": "^2.10.1",
-                "orchestra/testbench-core": "^9.12.0 || ^10.4",
-                "pestphp/pest": "^3.8.2 || ^4.0.0",
-                "sebastian/environment": "^7.2.1 || ^8.0"
+                "orchestra/testbench-core": "^9.12.0 || ^10.1",
+                "pestphp/pest": "^3.8.0",
+                "sebastian/environment": "^7.2.0 || ^8.0"
             },
             "type": "library",
@@ -6838,5 +6814,403 @@
                 }
             ],
-            "time": "2025-11-20T02:55:25+00:00"
+            "time": "2025-04-03T14:33:09+00:00"
+        },
+        {
+            "name": "pestphp/pest",
+            "version": "v3.8.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pestphp/pest.git",
+                "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pestphp/pest/zipball/c6244a8712968dbac88eb998e7ff3b5caa556b0d",
+                "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d",
+                "shasum": ""
+            },
+            "require": {
+                "brianium/paratest": "^7.8.3",
+                "nunomaduro/collision": "^8.8.0",
+                "nunomaduro/termwind": "^2.3.0",
+                "pestphp/pest-plugin": "^3.0.0",
+                "pestphp/pest-plugin-arch": "^3.1.0",
+                "pestphp/pest-plugin-mutate": "^3.0.5",
+                "php": "^8.2.0",
+                "phpunit/phpunit": "^11.5.15"
+            },
+            "conflict": {
+                "filp/whoops": "<2.16.0",
+                "phpunit/phpunit": ">11.5.15",
+                "sebastian/exporter": "<6.0.0",
+                "webmozart/assert": "<1.11.0"
+            },
+            "require-dev": {
+                "pestphp/pest-dev-tools": "^3.4.0",
+                "pestphp/pest-plugin-type-coverage": "^3.5.0",
+                "symfony/process": "^7.2.5"
+            },
+            "bin": [
+                "bin/pest"
+            ],
+            "type": "library",
+            "extra": {
+                "pest": {
+                    "plugins": [
+                        "Pest\\Mutate\\Plugins\\Mutate",
+                        "Pest\\Plugins\\Configuration",
+                        "Pest\\Plugins\\Bail",
+                        "Pest\\Plugins\\Cache",
+                        "Pest\\Plugins\\Coverage",
+                        "Pest\\Plugins\\Init",
+                        "Pest\\Plugins\\Environment",
+                        "Pest\\Plugins\\Help",
+                        "Pest\\Plugins\\Memory",
+                        "Pest\\Plugins\\Only",
+                        "Pest\\Plugins\\Printer",
+                        "Pest\\Plugins\\ProcessIsolation",
+                        "Pest\\Plugins\\Profile",
+                        "Pest\\Plugins\\Retry",
+                        "Pest\\Plugins\\Snapshot",
+                        "Pest\\Plugins\\Verbose",
+                        "Pest\\Plugins\\Version",
+                        "Pest\\Plugins\\Parallel"
+                    ]
+                },
+                "phpstan": {
+                    "includes": [
+                        "extension.neon"
+                    ]
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php",
+                    "src/Pest.php"
+                ],
+                "psr-4": {
+                    "Pest\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nuno Maduro",
+                    "email": "enunomaduro@gmail.com"
+                }
+            ],
+            "description": "The elegant PHP Testing Framework.",
+            "keywords": [
+                "framework",
+                "pest",
+                "php",
+                "test",
+                "testing",
+                "unit"
+            ],
+            "support": {
+                "issues": "https://github.com/pestphp/pest/issues",
+                "source": "https://github.com/pestphp/pest/tree/v3.8.2"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-04-17T10:53:02+00:00"
+        },
+        {
+            "name": "pestphp/pest-plugin",
+            "version": "v3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pestphp/pest-plugin.git",
+                "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e79b26c65bc11c41093b10150c1341cc5cdbea83",
+                "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^2.0.0",
+                "composer-runtime-api": "^2.2.2",
+                "php": "^8.2"
+            },
+            "conflict": {
+                "pestphp/pest": "<3.0.0"
+            },
+            "require-dev": {
+                "composer/composer": "^2.7.9",
+                "pestphp/pest": "^3.0.0",
+                "pestphp/pest-dev-tools": "^3.0.0"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "Pest\\Plugin\\Manager"
+            },
+            "autoload": {
+                "psr-4": {
+                    "Pest\\Plugin\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The Pest plugin manager",
+            "keywords": [
+                "framework",
+                "manager",
+                "pest",
+                "php",
+                "plugin",
+                "test",
+                "testing",
+                "unit"
+            ],
+            "support": {
+                "source": "https://github.com/pestphp/pest-plugin/tree/v3.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/nunomaduro",
+                    "type": "patreon"
+                }
+            ],
+            "time": "2024-09-08T23:21:41+00:00"
+        },
+        {
+            "name": "pestphp/pest-plugin-arch",
+            "version": "v3.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pestphp/pest-plugin-arch.git",
+                "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/db7bd9cb1612b223e16618d85475c6f63b9c8daa",
+                "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa",
+                "shasum": ""
+            },
+            "require": {
+                "pestphp/pest-plugin": "^3.0.0",
+                "php": "^8.2",
+                "ta-tikoma/phpunit-architecture-test": "^0.8.4"
+            },
+            "require-dev": {
+                "pestphp/pest": "^3.8.1",
+                "pestphp/pest-dev-tools": "^3.4.0"
+            },
+            "type": "library",
+            "extra": {
+                "pest": {
+                    "plugins": [
+                        "Pest\\Arch\\Plugin"
+                    ]
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Autoload.php"
+                ],
+                "psr-4": {
+                    "Pest\\Arch\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The Arch plugin for Pest PHP.",
+            "keywords": [
+                "arch",
+                "architecture",
+                "framework",
+                "pest",
+                "php",
+                "plugin",
+                "test",
+                "testing",
+                "unit"
+            ],
+            "support": {
+                "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.1.1"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-04-16T22:59:48+00:00"
+        },
+        {
+            "name": "pestphp/pest-plugin-laravel",
+            "version": "v3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pestphp/pest-plugin-laravel.git",
+                "reference": "6801be82fd92b96e82dd72e563e5674b1ce365fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/6801be82fd92b96e82dd72e563e5674b1ce365fc",
+                "reference": "6801be82fd92b96e82dd72e563e5674b1ce365fc",
+                "shasum": ""
+            },
+            "require": {
+                "laravel/framework": "^11.39.1|^12.9.2",
+                "pestphp/pest": "^3.8.2",
+                "php": "^8.2.0"
+            },
+            "require-dev": {
+                "laravel/dusk": "^8.2.13|dev-develop",
+                "orchestra/testbench": "^9.9.0|^10.2.1",
+                "pestphp/pest-dev-tools": "^3.4.0"
+            },
+            "type": "library",
+            "extra": {
+                "pest": {
+                    "plugins": [
+                        "Pest\\Laravel\\Plugin"
+                    ]
+                },
+                "laravel": {
+                    "providers": [
+                        "Pest\\Laravel\\PestServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Autoload.php"
+                ],
+                "psr-4": {
+                    "Pest\\Laravel\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The Pest Laravel Plugin",
+            "keywords": [
+                "framework",
+                "laravel",
+                "pest",
+                "php",
+                "test",
+                "testing",
+                "unit"
+            ],
+            "support": {
+                "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v3.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-04-21T07:40:53+00:00"
+        },
+        {
+            "name": "pestphp/pest-plugin-mutate",
+            "version": "v3.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pestphp/pest-plugin-mutate.git",
+                "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/e10dbdc98c9e2f3890095b4fe2144f63a5717e08",
+                "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^5.2.0",
+                "pestphp/pest-plugin": "^3.0.0",
+                "php": "^8.2",
+                "psr/simple-cache": "^3.0.0"
+            },
+            "require-dev": {
+                "pestphp/pest": "^3.0.8",
+                "pestphp/pest-dev-tools": "^3.0.0",
+                "pestphp/pest-plugin-type-coverage": "^3.0.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Pest\\Mutate\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Sandro Gehri",
+                    "email": "sandrogehri@gmail.com"
+                }
+            ],
+            "description": "Mutates your code to find untested cases",
+            "keywords": [
+                "framework",
+                "mutate",
+                "mutation",
+                "pest",
+                "php",
+                "plugin",
+                "test",
+                "testing",
+                "unit"
+            ],
+            "support": {
+                "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v3.0.5"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/gehrisandro",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-09-22T07:54:40+00:00"
         },
         {
@@ -6959,15 +7333,237 @@
         },
         {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+                "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+            },
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.6.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
+                "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/deprecations": "^1.1",
+                "ext-filter": "*",
+                "php": "^7.4 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.7",
+                "phpstan/phpdoc-parser": "^1.7|^2.0",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.5 || ~1.6.0",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-webmozart-assert": "^1.2",
+                "phpunit/phpunit": "^9.5",
+                "psalm/phar": "^5.26"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "support": {
+                "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
+            },
+            "time": "2025-04-13T19:20:35+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+                "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/deprecations": "^1.0",
+                "php": "^7.3 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0",
+                "phpstan/phpdoc-parser": "^1.18|^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpunit/phpunit": "^9.5",
+                "rector/rector": "^0.13.9",
+                "vimeo/psalm": "^4.25"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "support": {
+                "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
+            },
+            "time": "2024-11-09T15:12:26+00:00"
+        },
+        {
+            "name": "phpstan/phpdoc-parser",
+            "version": "2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpdoc-parser.git",
+                "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+                "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/annotations": "^2.0",
+                "nikic/php-parser": "^5.3.0",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^2.0",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpstan/phpstan-strict-rules": "^2.0",
+                "phpunit/phpunit": "^9.6",
+                "symfony/process": "^5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PHPStan\\PhpDocParser\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPDoc parser with support for nullable, intersection and generic types",
+            "support": {
+                "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
+            },
+            "time": "2025-02-19T13:28:12+00:00"
+        },
+        {
             "name": "phpunit/php-code-coverage",
-            "version": "11.0.11",
+            "version": "11.0.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
-                "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
+                "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7",
+                "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7",
                 "shasum": ""
             },
@@ -7026,5 +7622,5 @@
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9"
             },
             "funding": [
@@ -7032,19 +7628,7 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-08-27T14:37:49+00:00"
+                }
+            ],
+            "time": "2025-02-25T13:26:39+00:00"
         },
         {
@@ -7295,14 +7879,14 @@
         {
             "name": "phpunit/phpunit",
-            "version": "11.5.44",
+            "version": "11.5.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "c346885c95423eda3f65d85a194aaa24873cda82"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82",
-                "reference": "c346885c95423eda3f65d85a194aaa24873cda82",
+                "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c",
+                "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c",
                 "shasum": ""
             },
@@ -7314,9 +7898,9 @@
                 "ext-xml": "*",
                 "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.13.4",
+                "myclabs/deep-copy": "^1.13.0",
                 "phar-io/manifest": "^2.0.4",
                 "phar-io/version": "^3.2.1",
                 "php": ">=8.2",
-                "phpunit/php-code-coverage": "^11.0.11",
+                "phpunit/php-code-coverage": "^11.0.9",
                 "phpunit/php-file-iterator": "^5.1.0",
                 "phpunit/php-invoker": "^5.0.1",
@@ -7325,11 +7909,11 @@
                 "sebastian/cli-parser": "^3.0.2",
                 "sebastian/code-unit": "^3.0.3",
-                "sebastian/comparator": "^6.3.2",
+                "sebastian/comparator": "^6.3.1",
                 "sebastian/diff": "^6.0.2",
-                "sebastian/environment": "^7.2.1",
-                "sebastian/exporter": "^6.3.2",
+                "sebastian/environment": "^7.2.0",
+                "sebastian/exporter": "^6.3.0",
                 "sebastian/global-state": "^7.0.2",
                 "sebastian/object-enumerator": "^6.0.1",
-                "sebastian/type": "^5.1.3",
+                "sebastian/type": "^5.1.2",
                 "sebastian/version": "^5.0.2",
                 "staabm/side-effects-detector": "^1.0.5"
@@ -7376,5 +7960,5 @@
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.15"
             },
             "funding": [
@@ -7388,17 +7972,9 @@
                 },
                 {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-13T07:17:35+00:00"
+            "time": "2025-03-23T16:02:11+00:00"
         },
         {
@@ -7574,14 +8150,14 @@
         {
             "name": "sebastian/comparator",
-            "version": "6.3.2",
+            "version": "6.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8",
-                "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8",
+                "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
+                "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
                 "shasum": ""
             },
@@ -7642,5 +8218,5 @@
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
                 "security": "https://github.com/sebastianbergmann/comparator/security/policy",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2"
+                "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
             },
             "funding": [
@@ -7648,19 +8224,7 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-08-10T08:07:46+00:00"
+                }
+            ],
+            "time": "2025-03-07T06:57:01+00:00"
         },
         {
@@ -7867,14 +8431,14 @@
         {
             "name": "sebastian/exporter",
-            "version": "6.3.2",
+            "version": "6.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
-                "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
+                "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3",
+                "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3",
                 "shasum": ""
             },
@@ -7890,5 +8454,5 @@
             "extra": {
                 "branch-alias": {
-                    "dev-main": "6.3-dev"
+                    "dev-main": "6.1-dev"
                 }
             },
@@ -7933,5 +8497,5 @@
                 "issues": "https://github.com/sebastianbergmann/exporter/issues",
                 "security": "https://github.com/sebastianbergmann/exporter/security/policy",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
+                "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0"
             },
             "funding": [
@@ -7939,19 +8503,7 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-09-24T06:12:51+00:00"
+                }
+            ],
+            "time": "2024-12-05T09:17:50+00:00"
         },
         {
@@ -8191,14 +8743,14 @@
         {
             "name": "sebastian/recursion-context",
-            "version": "6.0.3",
+            "version": "6.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
-                "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+                "reference": "694d156164372abbd149a4b85ccda2e4670c0e16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16",
+                "reference": "694d156164372abbd149a4b85ccda2e4670c0e16",
                 "shasum": ""
             },
@@ -8207,5 +8759,5 @@
             },
             "require-dev": {
-                "phpunit/phpunit": "^11.3"
+                "phpunit/phpunit": "^11.0"
             },
             "type": "library",
@@ -8243,5 +8795,5 @@
                 "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
                 "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
-                "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2"
             },
             "funding": [
@@ -8249,32 +8801,20 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-08-13T04:42:22+00:00"
+                }
+            ],
+            "time": "2024-07-03T05:10:34+00:00"
         },
         {
             "name": "sebastian/type",
-            "version": "5.1.3",
+            "version": "5.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
-                "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+                "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
+                "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
                 "shasum": ""
             },
@@ -8312,5 +8852,5 @@
                 "issues": "https://github.com/sebastianbergmann/type/issues",
                 "security": "https://github.com/sebastianbergmann/type/security/policy",
-                "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
+                "source": "https://github.com/sebastianbergmann/type/tree/5.1.2"
             },
             "funding": [
@@ -8318,19 +8858,7 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://liberapay.com/sebastianbergmann",
-                    "type": "liberapay"
-                },
-                {
-                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
-                    "type": "thanks_dev"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-08-09T06:55:48+00:00"
+                }
+            ],
+            "time": "2025-03-18T13:35:50+00:00"
         },
         {
@@ -8442,19 +8970,19 @@
         {
             "name": "symfony/yaml",
-            "version": "v7.4.0",
+            "version": "v7.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/6c84a4b55aee4cd02034d1c528e83f69ddf63810",
-                "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810",
+                "reference": "cea40a48279d58dc3efee8112634cb90141156c2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2",
+                "reference": "cea40a48279d58dc3efee8112634cb90141156c2",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.2",
-                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/deprecation-contracts": "^2.5|^3.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
@@ -8463,5 +8991,5 @@
             },
             "require-dev": {
-                "symfony/console": "^6.4|^7.0|^8.0"
+                "symfony/console": "^6.4|^7.0"
             },
             "bin": [
@@ -8494,5 +9022,5 @@
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/yaml/tree/v7.4.0"
+                "source": "https://github.com/symfony/yaml/tree/v7.3.0"
             },
             "funding": [
@@ -8506,26 +9034,81 @@
                 },
                 {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
                     "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-11-16T10:14:42+00:00"
+            "time": "2025-04-04T10:10:33+00:00"
+        },
+        {
+            "name": "ta-tikoma/phpunit-architecture-test",
+            "version": "0.8.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git",
+                "reference": "cf6fb197b676ba716837c886baca842e4db29005"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/cf6fb197b676ba716837c886baca842e4db29005",
+                "reference": "cf6fb197b676ba716837c886baca842e4db29005",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^4.18.0 || ^5.0.0",
+                "php": "^8.1.0",
+                "phpdocumentor/reflection-docblock": "^5.3.0",
+                "phpunit/phpunit": "^10.5.5  || ^11.0.0 || ^12.0.0",
+                "symfony/finder": "^6.4.0 || ^7.0.0"
+            },
+            "require-dev": {
+                "laravel/pint": "^1.13.7",
+                "phpstan/phpstan": "^1.10.52"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PHPUnit\\Architecture\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ni Shi",
+                    "email": "futik0ma011@gmail.com"
+                },
+                {
+                    "name": "Nuno Maduro",
+                    "email": "enunomaduro@gmail.com"
+                }
+            ],
+            "description": "Methods for testing application architecture",
+            "keywords": [
+                "architecture",
+                "phpunit",
+                "stucture",
+                "test",
+                "testing"
+            ],
+            "support": {
+                "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues",
+                "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.5"
+            },
+            "time": "2025-04-20T20:23:40+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.3.1",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
-                "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
                 "shasum": ""
             },
@@ -8556,5 +9139,5 @@
             "support": {
                 "issues": "https://github.com/theseer/tokenizer/issues",
-                "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
             },
             "funding": [
@@ -8564,5 +9147,5 @@
                 }
             ],
-            "time": "2025-11-17T20:03:58+00:00"
+            "time": "2024-03-03T12:36:25+00:00"
         }
     ],
@@ -8576,4 +9159,4 @@
     },
     "platform-dev": {},
-    "plugin-api-version": "2.9.0"
+    "plugin-api-version": "2.6.0"
 }
Index: config/app.php
===================================================================
--- config/app.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/app.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -102,5 +102,5 @@
     'previous_keys' => [
         ...array_filter(
-            explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
+            explode(',', env('APP_PREVIOUS_KEYS', ''))
         ),
     ],
Index: config/auth.php
===================================================================
--- config/auth.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/auth.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -105,5 +105,5 @@
     |--------------------------------------------------------------------------
     |
-    | Here you may define the number of seconds before a password confirmation
+    | Here you may define the amount of seconds before a password confirmation
     | window expires and users are asked to re-enter their password via the
     | confirmation screen. By default, the timeout lasts for three hours.
Index: config/cache.php
===================================================================
--- config/cache.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/cache.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -28,6 +28,5 @@
     |
     | Supported drivers: "array", "database", "file", "memcached",
-    |                    "redis", "dynamodb", "octane",
-    |                    "failover", "null"
+    |                    "redis", "dynamodb", "octane", "null"
     |
     */
@@ -92,12 +91,4 @@
         ],
 
-        'failover' => [
-            'driver' => 'failover',
-            'stores' => [
-                'database',
-                'array',
-            ],
-        ],
-
     ],
 
@@ -113,5 +104,5 @@
     */
 
-    'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
+    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
 
 ];
Index: config/database.php
===================================================================
--- config/database.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/database.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -41,5 +41,4 @@
             'journal_mode' => null,
             'synchronous' => null,
-            'transaction_mode' => 'DEFERRED',
         ],
 
@@ -149,5 +148,5 @@
         'options' => [
             'cluster' => env('REDIS_CLUSTER', 'redis'),
-            'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
+            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
             'persistent' => env('REDIS_PERSISTENT', false),
         ],
@@ -160,8 +159,4 @@
             'port' => env('REDIS_PORT', '6379'),
             'database' => env('REDIS_DB', '0'),
-            'max_retries' => env('REDIS_MAX_RETRIES', 3),
-            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
-            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
-            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
         ],
 
@@ -173,8 +168,4 @@
             'port' => env('REDIS_PORT', '6379'),
             'database' => env('REDIS_CACHE_DB', '1'),
-            'max_retries' => env('REDIS_MAX_RETRIES', 3),
-            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
-            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
-            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
         ],
 
Index: config/inertia.php
===================================================================
--- config/inertia.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ config/inertia.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,55 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Server Side Rendering
+    |--------------------------------------------------------------------------
+    |
+    | These options configures if and how Inertia uses Server Side Rendering
+    | to pre-render each initial request made to your application's pages
+    | so that server rendered HTML is delivered for the user's browser.
+    |
+    | See: https://inertiajs.com/server-side-rendering
+    |
+    */
+
+    'ssr' => [
+        'enabled' => true,
+        'url' => 'http://127.0.0.1:13714',
+        // 'bundle' => base_path('bootstrap/ssr/ssr.mjs'),
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Testing
+    |--------------------------------------------------------------------------
+    |
+    | The values described here are used to locate Inertia components on the
+    | filesystem. For instance, when using `assertInertia`, the assertion
+    | attempts to locate the component as a file relative to the paths.
+    |
+    */
+
+    'testing' => [
+
+        'ensure_pages_exist' => true,
+
+        'page_paths' => [
+            resource_path('js/pages'),
+        ],
+
+        'page_extensions' => [
+            'js',
+            'jsx',
+            'svelte',
+            'ts',
+            'tsx',
+            'vue',
+        ],
+
+    ],
+
+];
Index: config/logging.php
===================================================================
--- config/logging.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/logging.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -55,5 +55,5 @@
         'stack' => [
             'driver' => 'stack',
-            'channels' => explode(',', (string) env('LOG_STACK', 'single')),
+            'channels' => explode(',', env('LOG_STACK', 'single')),
             'ignore_exceptions' => false,
         ],
@@ -99,8 +99,8 @@
             'level' => env('LOG_LEVEL', 'debug'),
             'handler' => StreamHandler::class,
-            'handler_with' => [
+            'formatter' => env('LOG_STDERR_FORMATTER'),
+            'with' => [
                 'stream' => 'php://stderr',
             ],
-            'formatter' => env('LOG_STDERR_FORMATTER'),
             'processors' => [PsrLogMessageProcessor::class],
         ],
Index: config/mail.php
===================================================================
--- config/mail.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/mail.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -47,5 +47,5 @@
             'password' => env('MAIL_PASSWORD'),
             'timeout' => null,
-            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
+            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
         ],
 
@@ -86,5 +86,4 @@
                 'log',
             ],
-            'retry_after' => 60,
         ],
 
@@ -95,5 +94,4 @@
                 'postmark',
             ],
-            'retry_after' => 60,
         ],
 
Index: config/queue.php
===================================================================
--- config/queue.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/queue.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -25,6 +25,5 @@
     | each backend supported by Laravel. You're also free to add more.
     |
-    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
-    |          "deferred", "background", "failover", "null"
+    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
     |
     */
@@ -74,20 +73,4 @@
         ],
 
-        'deferred' => [
-            'driver' => 'deferred',
-        ],
-
-        'background' => [
-            'driver' => 'background',
-        ],
-
-        'failover' => [
-            'driver' => 'failover',
-            'connections' => [
-                'database',
-                'deferred',
-            ],
-        ],
-
     ],
 
Index: config/services.php
===================================================================
--- config/services.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/services.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -16,9 +16,5 @@
 
     'postmark' => [
-        'key' => env('POSTMARK_API_KEY'),
-    ],
-
-    'resend' => [
-        'key' => env('RESEND_API_KEY'),
+        'token' => env('POSTMARK_TOKEN'),
     ],
 
@@ -27,4 +23,8 @@
         'secret' => env('AWS_SECRET_ACCESS_KEY'),
         'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+    ],
+
+    'resend' => [
+        'key' => env('RESEND_KEY'),
     ],
 
Index: config/session.php
===================================================================
--- config/session.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ config/session.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -14,6 +14,6 @@
     | persist session data. Database storage is a great default choice.
     |
-    | Supported: "file", "cookie", "database", "memcached",
-    |            "redis", "dynamodb", "array"
+    | Supported: "file", "cookie", "database", "apc",
+    |            "memcached", "redis", "dynamodb", "array"
     |
     */
@@ -98,5 +98,5 @@
     | between requests. This must match one of your defined cache stores.
     |
-    | Affects: "dynamodb", "memcached", "redis"
+    | Affects: "apc", "dynamodb", "memcached", "redis"
     |
     */
@@ -130,5 +130,5 @@
     'cookie' => env(
         'SESSION_COOKIE',
-        Str::slug((string) env('APP_NAME', 'laravel')).'-session'
+        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
     ),
 
Index: tabase/migrations/2025_11_29_175518_create_subjects_table.php
===================================================================
--- database/migrations/2025_11_29_175518_create_subjects_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,32 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('subjects', function (Blueprint $table) {
-            $table->id();
-            $table->string('code')->unique();
-            $table->string('name');
-            $table->text('description')->nullable();
-            $table->integer('semester');
-            $table->integer('credits');
-            $table->timestamps();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('subjects');
-    }
-};
Index: tabase/migrations/2025_11_29_175520_create_career_paths_table.php
===================================================================
--- database/migrations/2025_11_29_175520_create_career_paths_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('career_paths', function (Blueprint $table) {
-            $table->id();
-            $table->string('name')->unique();
-            $table->text('description')->nullable();
-            $table->timestamps();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('career_paths');
-    }
-};
Index: tabase/migrations/2025_11_29_175522_create_user_progress_table.php
===================================================================
--- database/migrations/2025_11_29_175522_create_user_progress_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,33 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('user_progress', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('user_id')->constrained()->onDelete('cascade');
-            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
-            $table->foreignId('study_program_id')->constrained()->onDelete('cascade');
-            $table->enum('status', ['completed', 'in_progress', 'planned']);
-            $table->timestamp('completed_at')->nullable();
-            $table->timestamps();
-            $table->unique(['user_id', 'subject_id', 'study_program_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('user_progress');
-    }
-};
Index: tabase/migrations/2025_11_29_175542_create_career_path_subject_table.php
===================================================================
--- database/migrations/2025_11_29_175542_create_career_path_subject_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,32 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('career_path_subject', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('career_path_id')->constrained()->onDelete('cascade');
-            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
-            $table->integer('order')->default(0)->comment('Suggested order to take the subject');
-            $table->boolean('is_required')->default(true)->comment('Whether this subject is required for the career path');
-            $table->timestamps();
-            $table->unique(['career_path_id', 'subject_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('career_path_subject');
-    }
-};
Index: tabase/migrations/2025_11_29_180204_create_study_programs_table.php
===================================================================
--- database/migrations/2025_11_29_180204_create_study_programs_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('study_programs', function (Blueprint $table) {
-            $table->id();
-            $table->string('name_mk')->comment('Name in Macedonian');
-            $table->string('name_en')->nullable()->comment('Name in English');
-            $table->text('description_mk')->nullable();
-            $table->text('description_en')->nullable();
-            $table->integer('duration_years')->comment('Duration in years (2, 3, or 4)');
-            $table->enum('cycle', ['first', 'second', 'third'])->default('first')->comment('Study cycle');
-            $table->string('code')->unique()->comment('Study program code');
-            $table->timestamps();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('study_programs');
-    }
-};
Index: tabase/migrations/2025_11_29_180211_alter_subjects_table_add_fields.php
===================================================================
--- database/migrations/2025_11_29_180211_alter_subjects_table_add_fields.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,60 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::table('subjects', function (Blueprint $table) {
-            // Drop old columns
-            if (Schema::hasColumn('subjects', 'semester')) {
-                $table->dropColumn('semester');
-            }
-
-            // Add new columns
-            if (!Schema::hasColumn('subjects', 'name_mk')) {
-                $table->string('name_mk')->nullable()->after('name');
-            }
-            if (!Schema::hasColumn('subjects', 'description_mk')) {
-                $table->text('description_mk')->nullable()->after('description');
-            }
-            if (!Schema::hasColumn('subjects', 'semester_type')) {
-                $table->string('semester_type')->default('winter')->comment('winter or summer');
-            }
-            if (!Schema::hasColumn('subjects', 'year')) {
-                $table->integer('year')->default(1)->comment('Year of study (1-4)');
-            }
-            if (!Schema::hasColumn('subjects', 'subject_type')) {
-                $table->enum('subject_type', ['mandatory', 'elective'])->default('mandatory');
-            }
-            if (!Schema::hasColumn('subjects', 'instructors')) {
-                $table->string('instructors')->nullable();
-            }
-            if (!Schema::hasColumn('subjects', 'total_hours')) {
-                $table->integer('total_hours')->default(180);
-            }
-            if (!Schema::hasColumn('subjects', 'lecture_hours')) {
-                $table->integer('lecture_hours')->default(30);
-            }
-            if (!Schema::hasColumn('subjects', 'practice_hours')) {
-                $table->integer('practice_hours')->default(60);
-            }
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::table('subjects', function (Blueprint $table) {
-            //
-        });
-    }
-};
Index: tabase/migrations/2025_11_29_180214_create_subject_prerequisites_table.php
===================================================================
--- database/migrations/2025_11_29_180214_create_subject_prerequisites_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,30 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('subject_prerequisites', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('subject_id')->constrained()->onDelete('cascade')->comment('Subject that requires a prerequisite');
-            $table->foreignId('prerequisite_id')->constrained('subjects')->onDelete('cascade')->comment('The prerequisite subject');
-            $table->timestamps();
-            $table->unique(['subject_id', 'prerequisite_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('subject_prerequisites');
-    }
-};
Index: tabase/migrations/2025_11_29_180232_rename_career_path_to_study_program.php
===================================================================
--- database/migrations/2025_11_29_180232_rename_career_path_to_study_program.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,43 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        // Drop old career_path_subject table if it exists
-        if (Schema::hasTable('career_path_subject')) {
-            Schema::drop('career_path_subject');
-        }
-
-        // Drop old career_paths table if it exists
-        if (Schema::hasTable('career_paths')) {
-            Schema::drop('career_paths');
-        }
-
-        // Create new study_program_subject table
-        Schema::create('study_program_subject', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('study_program_id')->constrained('study_programs')->onDelete('cascade');
-            $table->foreignId('subject_id')->constrained()->onDelete('cascade');
-            $table->integer('order')->default(0)->comment('Suggested order within the program');
-            $table->enum('type', ['mandatory', 'elective'])->default('mandatory');
-            $table->timestamps();
-            $table->unique(['study_program_id', 'subject_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('study_program_subject');
-    }
-};
Index: tabase/migrations/2025_11_29_181557_add_role_to_users_table.php
===================================================================
--- database/migrations/2025_11_29_181557_add_role_to_users_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            //
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            //
-        });
-    }
-};
Index: tabase/migrations/2025_11_29_181605_add_role_to_users_table.php
===================================================================
--- database/migrations/2025_11_29_181605_add_role_to_users_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            $table->enum('role', ['student', 'admin'])->default('student')->after('password');
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            $table->dropColumn('role');
-        });
-    }
-};
Index: tabase/migrations/2025_12_28_231716_add_career_path_to_user_progress.php
===================================================================
--- database/migrations/2025_12_28_231716_add_career_path_to_user_progress.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::table('user_progress', function (Blueprint $table) {
-            $table->foreignId('career_path_id')->nullable()->constrained('career_paths')->onDelete('set null');
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::table('user_progress', function (Blueprint $table) {
-            $table->dropColumn('career_path_id');
-        });
-    }
-};
Index: tabase/migrations/2025_12_28_231955_recreate_career_paths_table.php
===================================================================
--- database/migrations/2025_12_28_231955_recreate_career_paths_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,40 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('career_paths', function (Blueprint $table) {
-            $table->id();
-            $table->string('name')->unique();
-            $table->text('description')->nullable();
-            $table->timestamps();
-        });
-
-        Schema::create('career_path_subject', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('career_path_id')->constrained('career_paths')->onDelete('cascade');
-            $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade');
-            $table->integer('order')->default(0)->comment('Suggested order to take the subject');
-            $table->boolean('is_required')->default(true)->comment('Whether this subject is required for the career path');
-            $table->timestamps();
-            $table->unique(['career_path_id', 'subject_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('career_path_subject');
-        Schema::dropIfExists('career_paths');
-    }
-};
Index: tabase/migrations/2025_12_29_add_year_semester_to_study_program_subject.php
===================================================================
--- database/migrations/2025_12_29_add_year_semester_to_study_program_subject.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::table('study_program_subject', function (Blueprint $table) {
-            $table->integer('year')->default(1)->after('type')->comment('Year level of the subject in this program');
-            $table->enum('semester_type', ['winter', 'summer'])->default('winter')->after('year')->comment('Semester type for this subject in this program');
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::table('study_program_subject', function (Blueprint $table) {
-            $table->dropColumn(['year', 'semester_type']);
-        });
-    }
-};
Index: tabase/migrations/2026_01_28_000000_create_roadmaps_table.php
===================================================================
--- database/migrations/2026_01_28_000000_create_roadmaps_table.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,35 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('roadmaps', function (Blueprint $table) {
-            $table->id();
-            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
-            $table->foreignId('study_program_id')->constrained('study_programs')->onDelete('cascade');
-            $table->foreignId('career_path_id')->nullable()->constrained('career_paths')->onDelete('set null');
-            $table->json('roadmap_data'); // Stores the generated roadmap suggestions
-            $table->json('semester_roadmap_data'); // Stores semester-by-semester roadmap
-            $table->timestamps();
-
-            // Add index for quick lookups
-            $table->index(['user_id', 'study_program_id']);
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('roadmaps');
-    }
-};
Index: tabase/seeders/AdminUserSeeder.php
===================================================================
--- database/seeders/AdminUserSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,30 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\User;
-use Illuminate\Database\Seeder;
-use Illuminate\Support\Facades\Hash;
-
-class AdminUserSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        User::create([
-            'name' => 'Admin User',
-            'email' => 'admin@example.com',
-            'password' => Hash::make('password'),
-            'role' => 'admin',
-        ]);
-
-        User::create([
-            'name' => 'Test Student',
-            'email' => 'student@example.com',
-            'password' => Hash::make('password'),
-            'role' => 'student',
-        ]);
-    }
-}
Index: tabase/seeders/AssignSubjectsToStudyProgramsSeeder.php
===================================================================
--- database/seeders/AssignSubjectsToStudyProgramsSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,583 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\StudyProgram;
-use App\Models\Subject;
-use Illuminate\Database\Seeder;
-
-class AssignSubjectsToStudyProgramsSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     * Assigns subjects to study programs based on curriculum data.
-     */
-    public function run(): void
-    {
-        $assignments = [
-            'Софтверско инженерство и информациски системи' => [
-                ['F23L1W005' => 'mandatory'],
-                ['F23L1W007' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F18L1S003' => 'mandatory'],
-                ['F23L1W003' => 'mandatory'],
-                ['F23L2S015' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F23L1W004' => 'mandatory'],
-                ['F18L1S034' => 'elective'],
-                ['F23L1S116' => 'elective'],
-                ['F23L1S120' => 'elective'],
-                ['F18L1S146' => 'elective'],
-                ['F18L1S066' => 'elective'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L2W014' => 'mandatory'],
-                ['F18L2S100' => 'elective'],
-                ['F18L2W109' => 'elective'],
-                ['F23L3W140' => 'elective'],
-                ['F18L2W165' => 'elective'],
-                ['F18L2S002' => 'mandatory'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L2S061' => 'elective'],
-                ['F23L3S002' => 'elective'],
-                ['F23L2S082' => 'elective'],
-                ['F23L2S084' => 'elective'],
-                ['F23L2S090' => 'elective'],
-                ['F23L2S095' => 'elective'],
-                ['F23L2S042' => 'elective'],
-                ['F18L2S110' => 'elective'],
-                ['F23L3S003' => 'elective'],
-                ['F18L2S119' => 'elective'],
-                ['F18L2S124' => 'elective'],
-                ['F23L3W004' => 'mandatory'],
-                ['F23L3W008' => 'mandatory'],
-                ['F23L3W009' => 'mandatory'],
-                ['F18L3W060' => 'elective'],
-                ['F23L2S001' => 'elective'],
-                ['F18L3W081' => 'elective'],
-                ['F18L3W043' => 'elective'],
-                ['F18L3W115' => 'elective'],
-                ['CSEW522' => 'elective'],
-                ['F18L3W148' => 'elective'],
-                ['F23L3S010' => 'mandatory'],
-                ['F23L3S012' => 'mandatory'],
-                ['F23L3S019' => 'mandatory'],
-                ['F18L3S077' => 'elective'],
-                ['F18L3S118' => 'elective'],
-                ['F23L4W002' => 'elective'],
-                ['F18L3S155' => 'elective'],
-                ['F18L3S163' => 'elective'],
-                ['F23L3W021' => 'mandatory'],
-                ['F18L3W085' => 'elective'],
-                ['F18L3W089' => 'elective'],
-                ['F18L3W103' => 'elective'],
-                ['F18L3W027' => 'elective'],
-                ['F18L3W126' => 'elective'],
-                ['F18L3W128' => 'elective'],
-                ['F18L3W137' => 'elective'],
-                ['F18L3W038' => 'elective'],
-                ['F18L3W154' => 'elective'],
-                ['F18L3W161' => 'elective'],
-                ['F23L3S168' => 'mandatory'],
-                ['F23L3S022' => 'mandatory'],
-                ['F18L3S078' => 'elective'],
-                ['F18L3S080' => 'elective'],
-                ['F18L3S083' => 'elective'],
-                ['F18L3S086' => 'elective'],
-                ['F18L3S102' => 'elective'],
-                ['F18L3S132' => 'elective'],
-                ['F23L4W001' => 'elective'],
-                ['F18L3S141' => 'elective'],
-                ['F23L3S028' => 'elective'],
-                ['F18L3S162' => 'elective'],
-                ['F18L1W005' => 'mandatory'],
-                ['F18L1S013' => 'mandatory'],
-                ['F18L1S016' => 'mandatory'],
-                ['F18L1S116' => 'elective'],
-                ['F18L1S026' => 'elective'],
-                ['F18L1S120' => 'elective'],
-                ['F18L2W014' => 'mandatory'],
-                ['F18L2W006' => 'mandatory'],
-                ['F18L2W167' => 'elective'],
-                ['F18L2W104' => 'elective'],
-                ['F18L2S017' => 'mandatory'],
-                ['F18L2S097' => 'elective'],
-                ['F18L2S114' => 'elective'],
-                ['F18L2S099' => 'elective'],
-                ['F18L2S042' => 'elective'],
-                ['F18L2S164' => 'elective'],
-                ['F18L3S084' => 'elective'],
-                ['F18L2S061' => 'elective'],
-                ['F18L3W009' => 'mandatory'],
-                ['F18L3W136' => 'elective'],
-                ['F18L3W053' => 'elective'],
-                ['F18L3W035' => 'elective'],
-                ['F18L3W134' => 'elective'],
-                ['F18L3S010' => 'mandatory'],
-                ['F18L3S073' => 'elective'],
-                ['F18L3S150' => 'elective'],
-                ['F18L3S093' => 'elective'],
-                ['F18L3S025' => 'elective'],
-                ['F18L3S040' => 'elective'],
-                ['F18L3S039' => 'elective'],
-                ['F18L3S091' => 'elective'],
-                ['F18L3S087' => 'elective'],
-                ['F18L3S036' => 'elective'],
-                ['F18L3S135' => 'elective'],
-                ['F18L3S149' => 'elective'],
-                ['F18L3S047' => 'elective'],
-                ['F18L3S159' => 'elective'],
-                ['F18L3S062' => 'elective'],
-                ['F18L3W072' => 'elective'],
-                ['F18L3W068' => 'elective'],
-                ['F18L3W074' => 'elective'],
-                ['F18L3W156' => 'elective'],
-                ['F18L3W092' => 'elective'],
-                ['F18L3W075' => 'elective'],
-                ['F18L3W105' => 'elective'],
-                ['F18W3S085' => 'elective'],
-                ['F18L3W088' => 'elective'],
-                ['F18L3W108' => 'elective'],
-                ['F18L3W123' => 'elective'],
-                ['F18L3W129' => 'elective'],
-                ['F18L3W142' => 'elective'],
-                ['F18L3W144' => 'elective'],
-                ['F18L3W160' => 'elective'],
-                ['F18L3W048' => 'elective'],
-                ['F18L3W152' => 'elective'],
-                ['F18L3W079' => 'elective'],
-                ['F18L3S121' => 'elective'],
-                ['F18L3S130' => 'elective'],
-                ['F18L3S113' => 'elective'],
-                ['F18L3S157' => 'elective'],
-                ['F18L3S028' => 'elective'],
-                ['F18L3S106' => 'elective'],
-                ['F18L3S107' => 'elective'],
-                ['F18L3S127' => 'elective'],
-                ['F23L1W004' => 'mandatory'],
-                ['F23L1W005' => 'mandatory'],
-                ['F23L1W007' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F23L1S003' => 'mandatory'],
-                ['F23L1S016' => 'mandatory'],
-                ['F23L2S001' => 'mandatory'],
-                ['F23L2S015' => 'mandatory'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L2W014' => 'mandatory'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L2S002' => 'mandatory'],
-                ['F23L2S017' => 'mandatory'],
-                ['F23L2S030' => 'mandatory'],
-                ['F23L3S100' => 'mandatory'],
-                ['F23L3W004' => 'mandatory'],
-                ['F23L3W008' => 'mandatory'],
-                ['F23L3W009' => 'mandatory'],
-                ['F23L3W140' => 'mandatory'],
-                ['F23L3S010' => 'mandatory'],
-                ['F23L3S012' => 'mandatory'],
-                ['F23L3S019' => 'mandatory'],
-                ['F23L3S138' => 'mandatory'],
-                ['F23L3W021' => 'mandatory'],
-                ['F23L3S022' => 'mandatory'],
-                ['F23L3S028' => 'mandatory'],
-                ['F23L3S168' => 'mandatory'],
-                ['F23L1S052' => 'mandatory'],
-                ['F23L1S116' => 'mandatory'],
-                ['F23L1S120' => 'mandatory'],
-                ['F23L1S146' => 'mandatory'],
-                ['F23L2S066' => 'mandatory'],
-                ['F23L1S026' => 'mandatory'],
-                ['F23L2S042' => 'mandatory'],
-                ['F23L2S051' => 'mandatory'],
-                ['F23L2S061' => 'mandatory'],
-                ['F23L2S082' => 'mandatory'],
-                ['F23L2S084' => 'mandatory'],
-                ['F23L2S090' => 'mandatory'],
-                ['F23L2S095' => 'mandatory'],
-            ],
-            'Интернет, мрежи и безбедност' => [
-                ['F23L1W005' => 'mandatory'],
-                ['F23L1W007' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F23L1W003' => 'mandatory'],
-                ['F18L1S045' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F18L1S066' => 'mandatory'],
-                ['F23L1W004' => 'mandatory'],
-                ['F18L1S023' => 'elective'],
-                ['F18L1S034' => 'elective'],
-                ['F23L1S116' => 'elective'],
-                ['F23L1S120' => 'elective'],
-                ['F23L2S015' => 'elective'],
-                ['F18L1S146' => 'elective'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L3W002' => 'mandatory'],
-                ['F18L2W067' => 'mandatory'],
-                ['F18L2W109' => 'elective'],
-                ['F23L3W140' => 'elective'],
-                ['F18L2W147' => 'elective'],
-                ['F18L2W165' => 'elective'],
-                ['F23L2S061' => 'mandatory'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L3S002' => 'elective'],
-                ['F23L2S082' => 'elective'],
-                ['F23L2S084' => 'elective'],
-                ['F23L2S090' => 'elective'],
-                ['F18L2S110' => 'elective'],
-                ['F18L2S124' => 'elective'],
-                ['F23L3W003' => 'elective'],
-                ['F18L3W060' => 'mandatory'],
-                ['F23L3W004' => 'mandatory'],
-                ['F18L3W065' => 'mandatory'],
-                ['F23L2S001' => 'elective'],
-                ['F18L3W081' => 'elective'],
-                ['F23L3W008' => 'elective'],
-                ['F18L3W043' => 'elective'],
-                ['F18L3W115' => 'elective'],
-                ['F18L3W148' => 'elective'],
-                ['F18L3W037' => 'elective'],
-                ['F18L3S059' => 'mandatory'],
-                ['F18L3S077' => 'elective'],
-                ['F23L3S010' => 'elective'],
-                ['F18L3S111' => 'elective'],
-                ['F18L3S118' => 'elective'],
-                ['F18L3S122' => 'elective'],
-                ['F18L3S125' => 'elective'],
-                ['F18L3S155' => 'elective'],
-                ['F18L3W064' => 'mandatory'],
-                ['F18L3W085' => 'elective'],
-                ['F18L3W098' => 'elective'],
-                ['F18L3W103' => 'elective'],
-                ['F18L3W126' => 'elective'],
-                ['F18L3W128' => 'elective'],
-                ['F18L3W133' => 'elective'],
-                ['F18L3W145' => 'elective'],
-                ['F23L3S168' => 'mandatory'],
-                ['F18L3S063' => 'mandatory'],
-                ['F18L3S080' => 'elective'],
-                ['F18L3S101' => 'elective'],
-                ['F18L3S132' => 'elective'],
-                ['F23L4W001' => 'elective'],
-                ['F18L3S141' => 'elective'],
-                ['F23L3S028' => 'elective'],
-                ['F18L3S162' => 'elective'],
-                ['F23L3S022' => 'elective'],
-            ],
-            'Примена на информациски технологии' => [
-                ['F23L1W005' => 'mandatory'],
-                ['F23L1W007' => 'mandatory'],
-                ['F23L1W003' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F18L1S003' => 'mandatory'],
-                ['F18L1S023' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F23L1W004' => 'mandatory'],
-                ['F18L1S052' => 'elective'],
-                ['F18L1S034' => 'elective'],
-                ['F23L1S116' => 'elective'],
-                ['F23L1S120' => 'elective'],
-                ['F23L2S015' => 'elective'],
-                ['F18L1S146' => 'elective'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L2W014' => 'mandatory'],
-                ['F18L2W096' => 'elective'],
-                ['F18L2S100' => 'elective'],
-                ['F18L2W109' => 'elective'],
-                ['F23L3W140' => 'elective'],
-                ['F18L2W165' => 'elective'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L3W003' => 'mandatory'],
-                ['F18L2S002' => 'elective'],
-                ['F23L2S061' => 'elective'],
-                ['F23L3S002' => 'elective'],
-                ['F23L2S082' => 'elective'],
-                ['F23L2S084' => 'elective'],
-                ['F23L2S090' => 'elective'],
-                ['F23L2S042' => 'elective'],
-                ['F18L2S110' => 'elective'],
-                ['F23L3S003' => 'elective'],
-                ['F18L2S119' => 'elective'],
-                ['F18L2S124' => 'elective'],
-                ['F23L3W004' => 'mandatory'],
-                ['F23L2S001' => 'mandatory'],
-                ['F23L3W008' => 'mandatory'],
-                ['F18L3W060' => 'elective'],
-                ['F18L3W081' => 'elective'],
-                ['F23L3W009' => 'elective'],
-                ['F18L3W043' => 'elective'],
-                ['F18L3W115' => 'elective'],
-                ['CSEW522' => 'elective'],
-                ['F18L3W148' => 'elective'],
-                ['F23L3S010' => 'mandatory'],
-                ['F18L3S077' => 'elective'],
-                ['F23L3S012' => 'elective'],
-                ['F18L3S118' => 'elective'],
-                ['F23L4W002' => 'elective'],
-                ['F18L3S155' => 'elective'],
-                ['F23L3S019' => 'elective'],
-                ['F18L3W027' => 'mandatory'],
-                ['F23L3W021' => 'mandatory'],
-                ['F18L3W085' => 'elective'],
-                ['F18L3W089' => 'elective'],
-                ['F18L3W103' => 'elective'],
-                ['F18L3W126' => 'elective'],
-                ['F18L3W128' => 'elective'],
-                ['F18L3W137' => 'elective'],
-                ['F18L3W038' => 'elective'],
-                ['F18L3W161' => 'elective'],
-                ['F23L3S168' => 'mandatory'],
-                ['F23L3S028' => 'mandatory'],
-                ['F23L3S022' => 'mandatory'],
-                ['F18L3S078' => 'elective'],
-                ['F18L3S080' => 'elective'],
-                ['F18L3S086' => 'elective'],
-                ['F18L3S102' => 'elective'],
-                ['F18L3S132' => 'elective'],
-                ['F23L4W001' => 'elective'],
-                ['F18L3S141' => 'elective'],
-                ['F18L3S162' => 'elective'],
-            ],
-            'Компјутерско инженерство' => [
-                ['F18L1W041' => 'mandatory'],
-                ['F18L1W033' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F18L1W049' => 'mandatory'],
-                ['F23L1W003' => 'mandatory'],
-                ['F18L1S034' => 'mandatory'],
-                ['F18L1S045' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F23L1W004' => 'mandatory'],
-                ['F23L1S116' => 'elective'],
-                ['F23L1S120' => 'elective'],
-                ['F23L2S015' => 'elective'],
-                ['F18L1S146' => 'elective'],
-                ['F18L1S066' => 'elective'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L3W002' => 'mandatory'],
-                ['F18L2W109' => 'elective'],
-                ['F23L3W140' => 'elective'],
-                ['F18L2W147' => 'elective'],
-                ['F18L2W165' => 'elective'],
-                ['F23L2S042' => 'mandatory'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L3W003' => 'mandatory'],
-                ['F18L2S002' => 'elective'],
-                ['F23L2S061' => 'elective'],
-                ['F23L3S002' => 'elective'],
-                ['F23L2S082' => 'elective'],
-                ['F23L2S084' => 'elective'],
-                ['F23L2S090' => 'elective'],
-                ['F23L2S095' => 'elective'],
-                ['F18L2S110' => 'elective'],
-                ['F23L3S003' => 'elective'],
-                ['F18L2S124' => 'elective'],
-                ['F23L3W004' => 'mandatory'],
-                ['F18L3W043' => 'mandatory'],
-                ['F18L3W044' => 'mandatory'],
-                ['F18L3W060' => 'elective'],
-                ['F23L2S001' => 'elective'],
-                ['F18L3W081' => 'elective'],
-                ['F23L3W008' => 'elective'],
-                ['F23L3W009' => 'elective'],
-                ['F18L3W115' => 'elective'],
-                ['F18L3W065' => 'elective'],
-                ['CSEW522' => 'elective'],
-                ['F18L3W148' => 'elective'],
-                ['F18L3W037' => 'elective'],
-                ['F18L3S059' => 'elective'],
-                ['F18L3S077' => 'elective'],
-                ['F23L3S010' => 'elective'],
-                ['F23L3S012' => 'elective'],
-                ['F18L3S118' => 'elective'],
-                ['F18L3S122' => 'elective'],
-                ['F23L4W002' => 'elective'],
-                ['F18L3S125' => 'elective'],
-                ['F18L3S153' => 'elective'],
-                ['F18L3S155' => 'elective'],
-                ['F18L3S158' => 'elective'],
-                ['F23L3S019' => 'elective'],
-                ['F18L3S163' => 'elective'],
-                ['F18L3W085' => 'elective'],
-                ['F18L3W089' => 'elective'],
-                ['F18L3W064' => 'elective'],
-                ['F18L3W098' => 'elective'],
-                ['F18L3W103' => 'elective'],
-                ['F18L3W117' => 'elective'],
-                ['F18L3W027' => 'elective'],
-                ['F18L3W126' => 'elective'],
-                ['F18L3W128' => 'elective'],
-                ['F18L3W131' => 'elective'],
-                ['F18L3W133' => 'elective'],
-                ['F18L3W137' => 'elective'],
-                ['F18L3W145' => 'elective'],
-                ['F18L3W038' => 'elective'],
-                ['F18L3W161' => 'elective'],
-                ['F23L3S168' => 'mandatory'],
-                ['F23L3S022' => 'mandatory'],
-                ['F18L3S078' => 'elective'],
-                ['F18L3S080' => 'elective'],
-                ['F18L3S083' => 'elective'],
-                ['F18L3S086' => 'elective'],
-                ['F18L3S063' => 'elective'],
-                ['F18L3S101' => 'elective'],
-                ['F18L3S132' => 'elective'],
-                ['F23L4W001' => 'elective'],
-                ['F18L3S141' => 'elective'],
-                ['F23L3S028' => 'elective'],
-                ['F18L3S162' => 'elective'],
-            ],
-            'Компјутерски науки' => [
-                ['F23L1W007' => 'mandatory'],
-                ['F18L1W031' => 'mandatory'],
-                ['F18L1W033' => 'mandatory'],
-                ['F23L1W018' => 'mandatory'],
-                ['F23L1W020' => 'mandatory'],
-                ['F18L1S003' => 'mandatory'],
-                ['F18L1S032' => 'mandatory'],
-                ['F18L1S034' => 'mandatory'],
-                ['F23L2W002' => 'mandatory'],
-                ['F23L1W004' => 'mandatory'],
-                ['F23L1S116' => 'elective'],
-                ['F23L1S120' => 'elective'],
-                ['F23L2S015' => 'elective'],
-                ['F18L1S146' => 'elective'],
-                ['F23L2W001' => 'mandatory'],
-                ['F23L2W014' => 'mandatory'],
-                ['F18L2W109' => 'elective'],
-                ['F23L3W140' => 'elective'],
-                ['F18L2W165' => 'elective'],
-                ['F23L3S002' => 'mandatory'],
-                ['F23L3W001' => 'mandatory'],
-                ['F23L3W003' => 'mandatory'],
-                ['F18L2S002' => 'elective'],
-                ['F23L2S061' => 'elective'],
-                ['F23L2S082' => 'elective'],
-                ['F23L2S084' => 'elective'],
-                ['F23L2S090' => 'elective'],
-                ['F23L2S095' => 'elective'],
-                ['F23L2S042' => 'elective'],
-                ['F18L2S110' => 'elective'],
-                ['F23L3S003' => 'elective'],
-                ['F18L2S124' => 'elective'],
-                ['F23L3W004' => 'mandatory'],
-                ['F18L3W037' => 'mandatory'],
-                ['F18L3W060' => 'elective'],
-                ['F23L2S001' => 'elective'],
-                ['F18L3W081' => 'elective'],
-                ['F23L3W008' => 'elective'],
-                ['F23L3W009' => 'elective'],
-                ['F18L3W043' => 'elective'],
-                ['F18L3W115' => 'elective'],
-                ['F18L3W065' => 'elective'],
-                ['CSEW522' => 'elective'],
-                ['F18L3W148' => 'elective'],
-                ['F23L3S010' => 'mandatory'],
-                ['F23L4W002' => 'mandatory'],
-                ['F18L3S059' => 'elective'],
-                ['F18L3S077' => 'elective'],
-                ['F23L3S012' => 'elective'],
-                ['F18L3S118' => 'elective'],
-                ['F18L3S122' => 'elective'],
-                ['F18L3S125' => 'elective'],
-                ['F18L3S153' => 'elective'],
-                ['F18L3S155' => 'elective'],
-                ['F18L3S158' => 'elective'],
-                ['F23L3S019' => 'elective'],
-                ['F18L3S163' => 'elective'],
-                ['F18L3W038' => 'mandatory'],
-                ['F18L3W076' => 'elective'],
-                ['F18L3W085' => 'elective'],
-                ['F18L3W089' => 'elective'],
-                ['F18L3W064' => 'elective'],
-                ['F18L3W103' => 'elective'],
-                ['F18L3W027' => 'elective'],
-                ['F18L3W126' => 'elective'],
-                ['F18L3W128' => 'elective'],
-                ['F18L3W131' => 'elective'],
-                ['F18L3W137' => 'elective'],
-                ['F18L3W145' => 'elective'],
-                ['F18L3W154' => 'elective'],
-                ['F18L3W161' => 'elective'],
-                ['F23L3S168' => 'mandatory'],
-                ['F18L3S078' => 'elective'],
-                ['F18L3S080' => 'elective'],
-                ['F18L3S083' => 'elective'],
-                ['F18L3S086' => 'elective'],
-                ['F18L3S102' => 'elective'],
-                ['F18L3S132' => 'elective'],
-                ['F23L4W001' => 'elective'],
-                ['F18L3S141' => 'elective'],
-                ['F18L3S151' => 'elective'],
-                ['F23L3S028' => 'elective'],
-                ['F18L3S112' => 'elective'],
-                ['F18L3S162' => 'elective'],
-                ['F23L3S022' => 'elective'],
-            ],
-        ];
-
-        foreach ($assignments as $programName => $subjects) {
-            $program = StudyProgram::where('name_mk', $programName)->first();
-            if (!$program) {
-                continue;
-            }
-
-            foreach ($subjects as $subjectData) {
-                foreach ($subjectData as $code => $type) {
-                    $subject = Subject::where('code', $code)->first();
-                    if ($subject) {
-                        $program->subjects()->syncWithoutDetaching([$subject->id => ['type' => $type]]);
-                    }
-                }
-            }
-        }
-
-        // Assign subjects to 3-year and 2-year programs from their 4-year counterparts
-        // For 3-year programs: use subjects from years 1-3 of the corresponding 4-year program
-        // For 2-year programs: use subjects from years 1-2 of the corresponding 4-year program
-        $programMappings = [
-            // 3-year programs map to 4-year programs with same base name
-            '3' => [
-                'Софтверско инженерство и информациски системи' => 'Софтверско инженерство и информациски системи',
-                'Интернет, мрежи и безбедност' => 'Интернет, мрежи и безбедност',
-                'Примена на информациски технологии' => 'Примена на информациски технологии',
-                'Компјутерско инженерство' => 'Компјутерско инженерство',
-                'Компјутерски науки' => 'Компјутерски науки',
-                'Стручни студии за програмирање' => 'Софтверско инженерство и информациски системи',
-            ],
-            // 2-year programs map to 4-year programs with same base name
-            '2' => [
-                'Стручни студии за програмирање' => 'Софтверско инженерство и информациски системи',
-            ],
-        ];
-
-        foreach ($programMappings as $targetDuration => $mappings) {
-            foreach ($mappings as $targetName => $sourceName) {
-                $targetProgram = StudyProgram::where('name_mk', $targetName)->where('duration_years', $targetDuration)->first();
-
-                // For 2-year programs, copy from 3-year version; for 3-year programs, copy from 4-year version
-                $sourceYearDuration = $targetDuration == 2 ? 3 : 4;
-                $sourceProgram = StudyProgram::where('name_mk', $sourceName)->where('duration_years', $sourceYearDuration)->first();
-
-                if ($targetProgram && $sourceProgram) {
-                    $maxYear = (int)$targetDuration;
-                    // For 3-year and 2-year programs, only copy MANDATORY subjects
-                    $sourceSubjects = $sourceProgram->subjects()
-                        ->wherePivot('type', '!=', null)
-                        ->where('year', '<=', $maxYear)
-                        ->where('subject_type', 'mandatory')
-                        ->get();
-
-                    foreach ($sourceSubjects as $subject) {
-                        $type = $subject->pivot->type ?? 'mandatory';
-                        $targetProgram->subjects()->syncWithoutDetaching([$subject->id => ['type' => $type]]);
-                    }
-                }
-            }
-        }
-    }
-}
Index: tabase/seeders/CareerPathSeeder.php
===================================================================
--- database/seeders/CareerPathSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,147 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\CareerPath;
-use App\Models\Subject;
-use Illuminate\Database\Seeder;
-
-class CareerPathSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        $careerPaths = [
-            [
-                'name' => 'Full Stack Web Development',
-                'description' => 'Build complete web applications from frontend to backend',
-            ],
-            [
-                'name' => 'Data Science & AI',
-                'description' => 'Specialize in data analysis, machine learning, and AI',
-            ],
-            [
-                'name' => 'DevOps & Cloud Computing',
-                'description' => 'Deploy, manage, and scale applications in the cloud',
-            ],
-            [
-                'name' => 'Game Development',
-                'description' => 'Create engaging interactive games and experiences',
-            ],
-            [
-                'name' => 'Cybersecurity',
-                'description' => 'Protect systems and data from security threats',
-            ],
-        ];
-
-        foreach ($careerPaths as $pathData) {
-            CareerPath::create($pathData);
-        }
-
-        // Define which subjects are required for each career path
-        $fullStackSubjects = [
-            'MATH101' => 1,
-            'PROG101' => 1,
-            'DS101' => 2,
-            'DISCRETE101' => 2,
-            'ALGO201' => 3,
-            'DB201' => 3,
-            'WEB201' => 3,
-            'OOP201' => 4,
-            'OS201' => 4,
-            'DB301' => 5,
-            'SE301' => 5,
-            'DEVOPS401' => 7,
-            'DISTRIB401' => 7,
-            'PROJECT401' => 8,
-        ];
-
-        $dataScienceSubjects = [
-            'MATH101' => 1,
-            'PROG101' => 1,
-            'MATH102' => 2,
-            'DS101' => 2,
-            'DISCRETE101' => 2,
-            'ALGO201' => 3,
-            'LINALG201' => 3,
-            'PROB201' => 4,
-            'OOP201' => 4,
-            'DB201' => 3,
-            'ML401' => 7,
-            'DL401' => 7,
-            'NLP401' => 7,
-            'PROJECT401' => 8,
-        ];
-
-        $devOpsSubjects = [
-            'PROG101' => 1,
-            'OS201' => 4,
-            'NETWORK301' => 5,
-            'SE301' => 5,
-            'DB201' => 3,
-            'DB301' => 5,
-            'ARCHI201' => 4,
-            'SECURITY301' => 6,
-            'DEVOPS401' => 7,
-            'DISTRIB401' => 7,
-            'PROJECT401' => 8,
-        ];
-
-        $gameDevSubjects = [
-            'MATH101' => 1,
-            'PROG101' => 1,
-            'DS101' => 2,
-            'ALGO201' => 3,
-            'OOP201' => 4,
-            'LINALG201' => 3,
-            'GRAPHICS301' => 6,
-            'GAME401' => 7,
-            'PHYS101' => 1,
-            'PHYS102' => 2,
-            'SE301' => 5,
-            'PROJECT401' => 8,
-        ];
-
-        $cybersecuritySubjects = [
-            'PROG101' => 1,
-            'DISCRETE101' => 2,
-            'MATH101' => 1,
-            'ALGO201' => 3,
-            'OS201' => 4,
-            'NETWORK301' => 5,
-            'DB201' => 3,
-            'ARCHI201' => 4,
-            'SECURITY301' => 6,
-            'SE301' => 5,
-            'DISTRIB401' => 7,
-            'PROJECT401' => 8,
-        ];
-
-        // Attach subjects to career paths
-        $this->attachSubjectsToCareePath('Full Stack Web Development', $fullStackSubjects);
-        $this->attachSubjectsToCareePath('Data Science & AI', $dataScienceSubjects);
-        $this->attachSubjectsToCareePath('DevOps & Cloud Computing', $devOpsSubjects);
-        $this->attachSubjectsToCareePath('Game Development', $gameDevSubjects);
-        $this->attachSubjectsToCareePath('Cybersecurity', $cybersecuritySubjects);
-    }
-
-    private function attachSubjectsToCareePath(string $careerPathName, array $subjectCodes): void
-    {
-        $careerPath = CareerPath::where('name', $careerPathName)->first();
-        if (!$careerPath) {
-            return;
-        }
-
-        foreach ($subjectCodes as $code => $order) {
-            $subject = Subject::where('code', $code)->first();
-            if ($subject) {
-                $careerPath->subjects()->attach($subject->id, [
-                    'order' => $order,
-                    'is_required' => true,
-                ]);
-            }
-        }
-    }
-}
Index: tabase/seeders/CareerPathSubjectsSeeder.php
===================================================================
--- database/seeders/CareerPathSubjectsSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,119 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\CareerPath;
-use App\Models\Subject;
-use Illuminate\Database\Seeder;
-
-class CareerPathSubjectsSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        // Map career paths to subject codes
-        $careerPathMappings = [
-            'Full Stack Web Development' => [
-                'F23L2S001',   // Web Programming
-                'F23L2W002',   // Object-Oriented Programming
-                'F23L2W001',   // Algorithms and Data Structures
-                'F23L3W004',   // Databases
-                'F23L3W024',   // Web Programming (Advanced)
-                'F23L3W003',   // Software Engineering
-                'F18L3W079',   // Web Based Systems
-                'F23L2S110',   // Internet technologies
-            ],
-            'Data Science & AI' => [
-                'F23L2W001',   // Algorithms and Data Structures
-                'F23L3W004',   // Databases
-                'F23L4W002',   // Machine Learning
-                'F18L3W008',   // Introduction to Data Science
-                'F23L3S002',   // Artificial Intelligence
-                'F18L1S023',   // Business Statistics
-                'F18L3W081',   // Visualization
-                'F18L3S150',   // Data Mining
-            ],
-            'DevOps & Cloud Computing' => [
-                'F23L3W001',   // Operating Systems
-                'F23L3W002',   // Computer Networks
-                'F23L3W003',   // Software Engineering
-                'F23L2W014',   // Computer Networks and Security
-                'F18L3S118',   // Continuous Integration and Delivery
-                'F18L3W060',   // System Administration
-                'F18L3S062',   // Virtualization
-            ],
-            'Game Development' => [
-                'F23L2W001',   // Algorithms and Data Structures
-                'F23L2W002',   // Object-Oriented Programming
-                'F23L3S003',   // Computer Graphics
-                'F23L1W003',   // Discrete Mathematics
-                'F18L3W092',   // Digital Post-production
-                'F18L3S113',   // Computer Animation
-                'F18L3W115',   // Computer Sound, Speech and Music
-            ],
-            'Cybersecurity' => [
-                'F23L3W001',   // Operating Systems
-                'F23L3W002',   // Computer Networks
-                'F23L2W014',   // Computer Networks and Security
-                'F23L3W003',   // Software Engineering
-                'F18L3W043',   // Information Security
-                'F18L3W065',   // Network Security
-                'F18L3S122',   // Cryptography
-                'F18L3S159',   // Software Defined Security
-            ],
-            'Database Administrator' => [
-                'F23L3W004',   // Databases
-                'F23L2W001',   // Algorithms and Data Structures
-                'F23L3W001',   // Operating Systems
-                'F18L3W074',   // Database Administration
-                'F18L3S138',   // Advanced Databases
-                'F18L3S141',   // Unstructured Databases
-                'F18L3S157',   // Data Warehouses and OLAP
-                'F18L3W075',   // Information Systems Analysis and Design
-            ],
-        ];
-
-        foreach ($careerPathMappings as $careerPathName => $subjectCodes) {
-            $careerPath = CareerPath::where('name', $careerPathName)->first();
-
-            // If career path doesn't exist, create it
-            if (!$careerPath) {
-                $descriptions = [
-                    'Full Stack Web Development' => 'Build complete web applications from frontend to backend',
-                    'Data Science & AI' => 'Specialize in data analysis, machine learning, and AI',
-                    'DevOps & Cloud Computing' => 'Deploy, manage, and scale applications in the cloud',
-                    'Game Development' => 'Create engaging interactive games and experiences',
-                    'Cybersecurity' => 'Protect systems and data from security threats',
-                    'Database Administrator' => 'Manage and optimize databases for large-scale applications',
-                ];
-
-                $careerPath = CareerPath::create([
-                    'name' => $careerPathName,
-                    'description' => $descriptions[$careerPathName] ?? '',
-                ]);
-            }
-
-            // Attach subjects to career path
-            foreach ($subjectCodes as $index => $code) {
-                $subject = Subject::where('code', $code)->first();
-
-                if ($subject) {
-                    // Check if not already attached
-                    if (!$careerPath->subjects()->where('subject_id', $subject->id)->exists()) {
-                        $careerPath->subjects()->attach($subject->id, [
-                            'order' => $index + 1,
-                            'is_required' => true,
-                        ]);
-                        $this->command->line("Attached {$code} ({$subject->name}) to {$careerPathName}");
-                    }
-                } else {
-                    $this->command->warn("Subject not found: {$code}");
-                }
-            }
-        }
-
-        $this->command->info("Career path subjects have been seeded successfully!");
-    }
-}
Index: database/seeders/DatabaseSeeder.php
===================================================================
--- database/seeders/DatabaseSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ database/seeders/DatabaseSeeder.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -4,11 +4,9 @@
 
 use App\Models\User;
-use Illuminate\Database\Console\Seeds\WithoutModelEvents;
+// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 use Illuminate\Database\Seeder;
 
 class DatabaseSeeder extends Seeder
 {
-    use WithoutModelEvents;
-
     /**
      * Seed the application's database.
@@ -21,14 +19,4 @@
             'name' => 'Test User',
             'email' => 'test@example.com',
-            'role' => 'student',
-        ]);
-
-        $this->call([
-            AdminUserSeeder::class,
-            SubjectSeeder::class,
-            StudyProgramSeeder::class,
-            AssignSubjectsToStudyProgramsSeeder::class,
-            SubjectPrerequisitesSeeder::class,
-            CareerPathSubjectsSeeder::class,
         ]);
     }
Index: tabase/seeders/StudyProgramSeeder.php
===================================================================
--- database/seeders/StudyProgramSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,118 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\StudyProgram;
-use Illuminate\Database\Seeder;
-
-class StudyProgramSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        $programs = [
-            // 4-year programs (Прв циклус)
-            [
-                'code' => 'SE-4Y',
-                'name_mk' => 'Софтверско инженерство и информациски системи',
-                'name_en' => 'Software engineering and information systems',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'INTERNET-4Y',
-                'name_mk' => 'Интернет, мрежи и безбедност',
-                'name_en' => 'Internet, networks and security',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'AITC-4Y',
-                'name_mk' => 'Примена на информациски технологии',
-                'name_en' => 'Application of information technologies',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'ITDU-4Y',
-                'name_mk' => 'Информатичка едукација',
-                'name_en' => 'IT education',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'CE-4Y',
-                'name_mk' => 'Компјутерско инженерство',
-                'name_en' => 'Computer engineering',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'CS-4Y',
-                'name_mk' => 'Компјутерски науки',
-                'name_en' => 'Computer science',
-                'duration_years' => 4,
-                'cycle' => 'first',
-            ],
-
-            // 3-year programs (Прв циклус - скратена верзија)
-            [
-                'code' => 'SE-3Y',
-                'name_mk' => 'Софтверско инженерство и информациски системи',
-                'name_en' => 'Software engineering and information systems',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'INTERNET-3Y',
-                'name_mk' => 'Интернет, мрежи и безбедност',
-                'name_en' => 'Internet, networks and security',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'AITC-3Y',
-                'name_mk' => 'Примена на информациски технологии',
-                'name_en' => 'Application of information technologies',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'CE-3Y',
-                'name_mk' => 'Компјутерско инженерство',
-                'name_en' => 'Computer engineering',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'CS-3Y',
-                'name_mk' => 'Компјутерски науки',
-                'name_en' => 'Computer science',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-
-            // Professional 3-year and 2-year programs
-            [
-                'code' => 'PROG-3Y',
-                'name_mk' => 'Стручни студии за програмирање',
-                'name_en' => 'Professional studies in programming',
-                'duration_years' => 3,
-                'cycle' => 'first',
-            ],
-            [
-                'code' => 'PROG-2Y',
-                'name_mk' => 'Стручни студии за програмирање',
-                'name_en' => 'Professional studies in programming',
-                'duration_years' => 2,
-                'cycle' => 'first',
-            ],
-        ];
-
-        foreach ($programs as $program) {
-            StudyProgram::create($program);
-        }
-    }
-}
Index: tabase/seeders/SubjectPrerequisitesSeeder.php
===================================================================
--- database/seeders/SubjectPrerequisitesSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,71 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Subject;
-use Illuminate\Database\Seeder;
-
-class SubjectPrerequisitesSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        // Load the prerequisites data from the JSON file
-        $jsonPath = storage_path('finki_subjects/pit_only_fixed_subjects.json');
-
-        if (!file_exists($jsonPath)) {
-            $this->command->error("File not found: {$jsonPath}");
-            return;
-        }
-
-        $subjects = json_decode(file_get_contents($jsonPath), true);
-
-        if (!is_array($subjects)) {
-            $this->command->error("Invalid JSON format in subjects file");
-            return;
-        }
-
-        $prerequisitesAdded = 0;
-
-        foreach ($subjects as $subjectData) {
-            // Find the subject in database by code
-            $subject = Subject::where('code', $subjectData['code'])->first();
-
-            if (!$subject) {
-                continue;
-            }
-
-            // Check if there are prerequisites
-            if (empty($subjectData['prerequisites'])) {
-                continue;
-            }
-
-            // Prerequisites are stored as an array of arrays
-            // Each inner array represents prerequisite alternatives (OR logic)
-            // For now, we'll implement simple AND logic - all prerequisites must be met
-
-            foreach ($subjectData['prerequisites'] as $prerequisiteGroup) {
-                // For each prerequisite in the group
-                foreach ($prerequisiteGroup as $prerequisiteName) {
-                    // Find the prerequisite subject by name
-                    $prerequisiteSubject = Subject::where('name', $prerequisiteName)
-                        ->orWhere('name_mk', $prerequisiteName)
-                        ->first();
-
-                    if ($prerequisiteSubject) {
-                        // Check if this prerequisite relation already exists
-                        if (!$subject->prerequisites()->where('prerequisite_id', $prerequisiteSubject->id)->exists()) {
-                            $subject->prerequisites()->attach($prerequisiteSubject->id);
-                            $prerequisitesAdded++;
-                            $this->command->line("Added prerequisite: {$prerequisiteSubject->code} ({$prerequisiteSubject->name}) -> {$subject->code} ({$subject->name})");
-                        }
-                    }
-                }
-            }
-        }
-
-        $this->command->info("Successfully added {$prerequisitesAdded} subject prerequisite relationships.");
-    }
-}
Index: tabase/seeders/SubjectSeeder.php
===================================================================
--- database/seeders/SubjectSeeder.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,2973 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Subject;
-use Illuminate\Database\Seeder;
-
-class SubjectSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        $subjects = [
-            [
-                'code' => 'F23L1W001',
-                'name' => 'Structured Programming',
-                'name_mk' => 'Структурирано програмирање',
-                'description' => 'Introduction to programming concepts and C language',
-                'description_mk' => 'Вовед во концепти на програмирање и C јазик',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W002',
-                'name' => 'Calculus I',
-                'name_mk' => 'Анализа I',
-                'description' => 'Limits, derivatives, and integration',
-                'description_mk' => 'Граници, дериватни и интеграли',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W003',
-                'name' => 'Discrete Mathematics',
-                'name_mk' => 'Дискретна математика',
-                'description' => 'Logic, sets, combinatorics, graph theory',
-                'description_mk' => 'Логика, множества, комбинаторика, теорија на графови',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S001',
-                'name' => 'Calculus II',
-                'name_mk' => 'Анализа II',
-                'description' => 'Advanced calculus and series',
-                'description_mk' => 'Напредна анализа и серии',
-                'year' => 1,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S002',
-                'name' => 'Linear Algebra',
-                'name_mk' => 'Линеарна алгебра',
-                'description' => 'Vectors, matrices, eigenvalues',
-                'description_mk' => 'Вектори, матрици, карактеристични вредности',
-                'year' => 1,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S003',
-                'name' => 'Physics I',
-                'name_mk' => 'Физика I',
-                'description' => 'Mechanics and thermodynamics',
-                'description_mk' => 'Механика и термодинамика',
-                'year' => 1,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2W001',
-                'name' => 'Algorithms and Data Structures',
-                'name_mk' => 'Алгоритми и податочни структури',
-                'description' => 'Fundamental data structures and algorithm design',
-                'description_mk' => 'Основни структури и дизајн на алгоритми',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2W002',
-                'name' => 'Object-Oriented Programming',
-                'name_mk' => 'Објектно-ориентирано програмирање',
-                'description' => 'Classes, inheritance, polymorphism in C++/Java',
-                'description_mk' => 'Класи, наследување, полиморфизам во C++/Java',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2W003',
-                'name' => 'Digital Logic',
-                'name_mk' => 'Дигитална логика',
-                'description' => 'Boolean algebra, combinational and sequential circuits',
-                'description_mk' => 'Булова алгебра, комбинаторни и секвенцијални кола',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S001',
-                'name' => 'Web Programming',
-                'name_mk' => 'Веб програмирање',
-                'description' => 'HTML, CSS, JavaScript, and web frameworks',
-                'description_mk' => 'HTML, CSS, JavaScript, и веб фремворци',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S002',
-                'name' => 'Databases I',
-                'name_mk' => 'Бази на податоци I',
-                'description' => 'Relational model, SQL, database design',
-                'description_mk' => 'Релационален модел, SQL, дизајн на БП',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S003',
-                'name' => 'Computer Architecture',
-                'name_mk' => 'Архитектура на компјутери',
-                'description' => 'CPU design, memory hierarchy, assembly language',
-                'description_mk' => 'Дизајн на CPU, хиерархија на меморија, асемблер',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W001',
-                'name' => 'Operating Systems',
-                'name_mk' => 'Оперативни системи',
-                'description' => 'Processes, memory management, file systems',
-                'description_mk' => 'Процеси, управување со меморија, датотечни системи',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W002',
-                'name' => 'Computer Networks',
-                'name_mk' => 'Компјутерски мрежи',
-                'description' => 'TCP/IP, routing, network protocols',
-                'description_mk' => 'TCP/IP, рутирање, мрежни протоколи',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W003',
-                'name' => 'Software Engineering',
-                'name_mk' => 'Софтверско инженерство',
-                'description' => 'SDLC, design patterns, testing, project management',
-                'description_mk' => 'SDLC, шаблони на дизајн, тестирање, менаџмент',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S001',
-                'name' => 'Cybersecurity',
-                'name_mk' => 'Кибербезбедност',
-                'description' => 'Encryption, authentication, network security',
-                'description_mk' => 'Енкрипција, автентификација, мрежна безбедност',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S002',
-                'name' => 'Artificial Intelligence',
-                'name_mk' => 'Вештачка интелигенција',
-                'description' => 'Search algorithms, machine learning basics',
-                'description_mk' => 'Алгоритми за пребарување, основи на машинско учење',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'elective',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S003',
-                'name' => 'Computer Graphics',
-                'name_mk' => 'Компјутерска графика',
-                'description' => '3D graphics, rendering, shaders',
-                'description_mk' => '3D графика, рендерирање, шејдери',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'elective',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L4W001',
-                'name' => 'Advanced Databases',
-                'name_mk' => 'Напредни бази на податоци',
-                'description' => 'Advanced SQL, transactions, optimization',
-                'description_mk' => 'Напредна SQL, транзакции, оптимизација',
-                'year' => 4,
-                'semester_type' => 'winter',
-                'subject_type' => 'elective',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L4W002',
-                'name' => 'Machine Learning',
-                'name_mk' => 'Машинско учење',
-                'description' => 'Classification, regression, neural networks',
-                'description_mk' => 'Класификација, регресија, невронски мрежи',
-                'year' => 4,
-                'semester_type' => 'winter',
-                'subject_type' => 'elective',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L4S001',
-                'name' => 'Cloud Computing',
-                'name_mk' => 'Облачни компјутери',
-                'description' => 'AWS, Azure, GCP, containerization',
-                'description_mk' => 'AWS, Azure, GCP, контејнеризација',
-                'year' => 4,
-                'semester_type' => 'summer',
-                'subject_type' => 'elective',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L4S002',
-                'name' => 'Capstone Project',
-                'name_mk' => 'Завршен проект',
-                'description' => 'Apply learned skills to a real-world project',
-                'description_mk' => 'Примена на научени вештини во реален проект',
-                'year' => 4,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 0,
-                'practice_hours' => 180,
-            ],
-            [
-                'code' => 'F23L1W004',
-                'name' => 'Спорт и здравје',
-                'name_mk' => 'Спорт и здравје',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W005',
-                'name' => 'Бизнис и менаџмент',
-                'name_mk' => 'Бизнис и менаџмент',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W007',
-                'name' => 'Вовед во компјутерските науки',
-                'name_mk' => 'Вовед во компјутерските науки',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W018',
-                'name' => 'Професионални вештини',
-                'name_mk' => 'Професионални вештини',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1W020',
-                'name' => 'Структурно програмирање',
-                'name_mk' => 'Структурно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S016',
-                'name' => 'Објектно-ориентирано програмирање',
-                'name_mk' => 'Објектно-ориентирано програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S015',
-                'name' => 'Објектно ориентирана анализа и дизајн',
-                'name_mk' => 'Објектно ориентирана анализа и дизајн',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2W014',
-                'name' => 'Компјутерски мрежи и безбедност',
-                'name_mk' => 'Компјутерски мрежи и безбедност',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S017',
-                'name' => 'Оперативни системи',
-                'name_mk' => 'Оперативни системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S030',
-                'name' => 'Вештачка интелигенција',
-                'name_mk' => 'Вештачка интелигенција',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S100',
-                'name' => 'Деловна пракса',
-                'name_mk' => 'Деловна пракса',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W004',
-                'name' => 'Бази на податоци',
-                'name_mk' => 'Бази на податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W008',
-                'name' => 'Вовед во науката за податоци',
-                'name_mk' => 'Вовед во науката за податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W009',
-                'name' => 'Дизајн и архитектура на софтвер',
-                'name_mk' => 'Дизајн и архитектура на софтвер',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W140',
-                'name' => 'Напредно програмирање',
-                'name_mk' => 'Напредно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S010',
-                'name' => 'Дизајн на интеракцијата човек-компјутер',
-                'name_mk' => 'Дизајн на интеракцијата човек-компјутер',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S012',
-                'name' => 'Интегрирани системи',
-                'name_mk' => 'Интегрирани системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S019',
-                'name' => 'Софтверски квалитет и тестирање',
-                'name_mk' => 'Софтверски квалитет и тестирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S138',
-                'name' => 'Напредни бази на податоци',
-                'name_mk' => 'Напредни бази на податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3W021',
-                'name' => 'Тимски проект',
-                'name_mk' => 'Тимски проект',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 4,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S022',
-                'name' => 'Управување со ИКТ проекти',
-                'name_mk' => 'Управување со ИКТ проекти',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 4,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S028',
-                'name' => 'Претприемништво',
-                'name_mk' => 'Претприемништво',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 4,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L3S168',
-                'name' => 'Дипломска работа',
-                'name_mk' => 'Дипломска работа',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 4,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S052',
-                'name' => 'Е-учење',
-                'name_mk' => 'Е-учење',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S116',
-                'name' => 'Компјутерски компоненти',
-                'name_mk' => 'Компјутерски компоненти',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S120',
-                'name' => 'Креативни вештини за решавање проблеми',
-                'name_mk' => 'Креативни вештини за решавање проблеми',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S146',
-                'name' => 'Основи на Веб дизајн',
-                'name_mk' => 'Основи на Веб дизајн',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S066',
-                'name' => 'F23L1S066 Основи на сајбер безбедноста',
-                'name_mk' => 'F23L1S066 Основи на сајбер безбедноста',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L1S026',
-                'name' => 'F23L2S026 Маркетинг',
-                'name_mk' => 'F23L2S026 Маркетинг',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S042',
-                'name' => 'Електрични кола',
-                'name_mk' => 'Електрични кола',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S051',
-                'name' => 'Информатичко размислување во образованието',
-                'name_mk' => 'Информатичко размислување во образованието',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S061',
-                'name' => 'Безжични и мобилни системи',
-                'name_mk' => 'Безжични и мобилни системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S082',
-                'name' => 'Визуелно програмирање',
-                'name_mk' => 'Визуелно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S084',
-                'name' => 'Вовед во екоинформатиката',
-                'name_mk' => 'Вовед во екоинформатиката',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S090',
-                'name' => 'Вовед во случајни процеси',
-                'name_mk' => 'Вовед во случајни процеси',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F23L2S095',
-                'name' => 'Дигитално процесирање на слика',
-                'name_mk' => 'Дигитално процесирање на слика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 5,
-                'semester_type' => 'summer',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S151',
-                'name' => 'Пресметковна биологија',
-                'name_mk' => 'Пресметковна биологија',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W038',
-                'name' => 'Програмски парадигми',
-                'name_mk' => 'Програмски парадигми',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W123',
-                'name' => 'Machine Vision',
-                'name_mk' => 'Machine Vision',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S141',
-                'name' => 'Неструктурирани бази на податоци',
-                'name_mk' => 'Неструктурирани бази на податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S114',
-                'name' => 'Computer graphics',
-                'name_mk' => 'Computer graphics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S155',
-                'name' => 'Сервисно ориентирани архитектури',
-                'name_mk' => 'Сервисно ориентирани архитектури',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S019',
-                'name' => 'Софтверски квалитет и тестирање',
-                'name_mk' => 'Софтверски квалитет и тестирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S030',
-                'name' => 'Вештачка интелигенција',
-                'name_mk' => 'Вештачка интелигенција',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S093',
-                'name' => 'Digital Forensics',
-                'name_mk' => 'Digital Forensics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S057',
-                'name' => 'Работа со надарен и ученици',
-                'name_mk' => 'Работа со надарен и ученици',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S091',
-                'name' => 'Geographic Information Systems',
-                'name_mk' => 'Geographic Information Systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W005',
-                'name' => 'Business and Management',
-                'name_mk' => 'Business and Management',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S107',
-                'name' => 'Intelligent systems',
-                'name_mk' => 'Intelligent systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S125',
-                'name' => 'Мерење и анализа на интернет сообраќај',
-                'name_mk' => 'Мерење и анализа на интернет сообраќај',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W072',
-                'name' => 'Autonomous robotics',
-                'name_mk' => 'Autonomous robotics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W136',
-                'name' => 'Advanced Web Design',
-                'name_mk' => 'Advanced Web Design',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S082',
-                'name' => 'Визуелно програмирање',
-                'name_mk' => 'Визуелно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W096',
-                'name' => 'Дигитизација',
-                'name_mk' => 'Дигитизација',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W104',
-                'name' => 'Еngineering mathematics',
-                'name_mk' => 'Еngineering mathematics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W152',
-                'name' => 'Video games programming',
-                'name_mk' => 'Video games programming',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W103',
-                'name' => 'Имплементација на системи со слободен и отворен код',
-                'name_mk' => 'Имплементација на системи со слободен и отворен код',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W004',
-                'name' => 'Бази на податоци',
-                'name_mk' => 'Бази на податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S159',
-                'name' => 'Software defined security',
-                'name_mk' => 'Software defined security',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W031',
-                'name' => 'Дискретни структури 1',
-                'name_mk' => 'Дискретни структури 1',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W148',
-                'name' => 'Основи на роботиката',
-                'name_mk' => 'Основи на роботиката',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W154',
-                'name' => 'Рударење на масивни податоци',
-                'name_mk' => 'Рударење на масивни податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S139',
-                'name' => 'Напредни теми од криптогра фија',
-                'name_mk' => 'Напредни теми од криптогра фија',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S028',
-                'name' => 'Entrepreneurship',
-                'name_mk' => 'Entrepreneurship',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S025',
-                'name' => 'Electronic and Mobile Commerce',
-                'name_mk' => 'Electronic and Mobile Commerce',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W144',
-                'name' => 'Operations research',
-                'name_mk' => 'Operations research',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W074',
-                'name' => 'Database administration',
-                'name_mk' => 'Database administration',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W161',
-                'name' => 'Социјални мрежи и медиуми',
-                'name_mk' => 'Социјални мрежи и медиуми',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S023',
-                'name' => 'Бизнис статистика',
-                'name_mk' => 'Бизнис статистика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W008',
-                'name' => 'Вовед во науката за податоци',
-                'name_mk' => 'Вовед во науката за податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W006',
-                'name' => 'Probability and statistics',
-                'name_mk' => 'Probability and statistics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W079',
-                'name' => 'Web Based Systems',
-                'name_mk' => 'Web Based Systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W160',
-                'name' => 'Software defined networks',
-                'name_mk' => 'Software defined networks',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S146',
-                'name' => 'Основи на веб дизајн',
-                'name_mk' => 'Основи на веб дизајн',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W037',
-                'name' => 'Паралелно и дистрибуирано процесирање',
-                'name_mk' => 'Паралелно и дистрибуирано процесирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S069',
-                'name' => 'Македонски јазик',
-                'name_mk' => 'Македонски јазик',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S017',
-                'name' => 'Operating systems',
-                'name_mk' => 'Operating systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S062',
-                'name' => 'Virtualization',
-                'name_mk' => 'Virtualization',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S102',
-                'name' => 'ИКТ за развој',
-                'name_mk' => 'ИКТ за развој',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W044',
-                'name' => 'Компјутерска електроника',
-                'name_mk' => 'Компјутерска електроника',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W064',
-                'name' => 'Дистрибуирани системи',
-                'name_mk' => 'Дистрибуирани системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S087',
-                'name' => 'Introduction to network science',
-                'name_mk' => 'Introduction to network science',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W060',
-                'name' => 'Администрација на системи',
-                'name_mk' => 'Администрација на системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W129',
-                'name' => 'Mobile platforms and programming',
-                'name_mk' => 'Mobile platforms and programming',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S121',
-                'name' => 'Blockchain and cryptocurrencies',
-                'name_mk' => 'Blockchain and cryptocurrencies',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W085',
-                'name' => 'Вовед во биоинформатиката',
-                'name_mk' => 'Вовед во биоинформатиката',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W109',
-                'name' => 'Интернет програмирање на клиентска страна',
-                'name_mk' => 'Интернет програмирање на клиентска страна',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S113',
-                'name' => 'Computer Animation',
-                'name_mk' => 'Computer Animation',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W020',
-                'name' => 'Структурно програмирање',
-                'name_mk' => 'Структурно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W142',
-                'name' => 'Natural language processing',
-                'name_mk' => 'Natural language processing',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S118',
-                'name' => 'Континуирана интеграција и испорака',
-                'name_mk' => 'Континуирана интеграција и испорака',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W018',
-                'name' => 'Професионални вештини',
-                'name_mk' => 'Професионални вештини',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S013',
-                'name' => 'Calculus',
-                'name_mk' => 'Calculus',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18W3S085',
-                'name' => 'Introduction to Bioinformatics',
-                'name_mk' => 'Introduction to Bioinformatics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W126',
-                'name' => 'Методологија на истражувањето во ИКТ',
-                'name_mk' => 'Методологија на истражувањето во ИКТ',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W089',
-                'name' => 'Вовед во препознавање на облици',
-                'name_mk' => 'Вовед во препознавање на облици',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S036',
-                'name' => 'Machine learning',
-                'name_mk' => 'Machine learning',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W165',
-                'name' => 'Управување со техничката поддршка',
-                'name_mk' => 'Управување со техничката поддршка',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S080',
-                'name' => 'Веб пребарувачки системи',
-                'name_mk' => 'Веб пребарувачки системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W068',
-                'name' => 'Cloud computing',
-                'name_mk' => 'Cloud computing',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W046',
-                'name' => 'Компјутерски мрежи',
-                'name_mk' => 'Компјутерски мрежи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S002',
-                'name' => 'Анализа на софтверските барања',
-                'name_mk' => 'Анализа на софтверските барања',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S045',
-                'name' => 'Компјутерски архитектури',
-                'name_mk' => 'Компјутерски архитектури',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W007',
-                'name' => 'Вовед во компјутерските науки',
-                'name_mk' => 'Вовед во компјутерските науки',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S130',
-                'name' => 'Business process modeling and management',
-                'name_mk' => 'Business process modeling and management',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S066',
-                'name' => 'Основи на сајбер безбедноста',
-                'name_mk' => 'Основи на сајбер безбедноста',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S127',
-                'name' => 'Mobile Applications',
-                'name_mk' => 'Mobile Applications',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W024',
-                'name' => 'Web Programming',
-                'name_mk' => 'Web Programming',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S100',
-                'name' => 'Економија за ИКТ инженери',
-                'name_mk' => 'Економија за ИКТ инженери',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S051',
-                'name' => 'ИКТ во образованието',
-                'name_mk' => 'ИКТ во образованието',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S158',
-                'name' => 'Современи компјутерски архитектури',
-                'name_mk' => 'Современи компјутерски архитектури',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W048',
-                'name' => 'Software for embedded systems',
-                'name_mk' => 'Software for embedded systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S162',
-                'name' => 'Споделување и пресметување во толпа',
-                'name_mk' => 'Споделување и пресметување во толпа',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W098',
-                'name' => 'Дистрибуирано складирање на податоци',
-                'name_mk' => 'Дистрибуирано складирање на податоци',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S164',
-                'name' => 'Information theory and digital communications',
-                'name_mk' => 'Information theory and digital communications',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W128',
-                'name' => 'Мобилни информациски системи',
-                'name_mk' => 'Мобилни информациски системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W081',
-                'name' => 'Визуелизација',
-                'name_mk' => 'Визуелизација',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S015',
-                'name' => 'Објектно ориентирана анализа и дизајн',
-                'name_mk' => 'Објектно ориентирана анализа и дизајн',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S003',
-                'name' => 'Архитектура и организација на компјутери',
-                'name_mk' => 'Архитектура и организација на компјутери',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W137',
-                'name' => 'Напредна интеракција човек компјутер',
-                'name_mk' => 'Напредна интеракција човек компјутер',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W092',
-                'name' => 'Digital Post-production',
-                'name_mk' => 'Digital Post-production',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S012',
-                'name' => 'Интегрирани системи',
-                'name_mk' => 'Интегрирани системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S143',
-                'name' => 'Одржливи и енергетски ефикасни компјутерски',
-                'name_mk' => 'Одржливи и енергетски ефикасни компјутерски',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W075',
-                'name' => 'Information Systems Analysis and Design',
-                'name_mk' => 'Information Systems Analysis and Design',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W105',
-                'name' => 'Innovation in ICT',
-                'name_mk' => 'Innovation in ICT',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S086',
-                'name' => 'Вовед во когнитивни науки',
-                'name_mk' => 'Вовед во когнитивни науки',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S120',
-                'name' => 'Puzzle based learning',
-                'name_mk' => 'Puzzle based learning',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'CSEW522',
-                'name' => 'Напреден веб дизајн',
-                'name_mk' => 'Напреден веб дизајн',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 4,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S097',
-                'name' => 'Algorithm design',
-                'name_mk' => 'Algorithm design',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W043',
-                'name' => 'Информациска безбедност',
-                'name_mk' => 'Информациска безбедност',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S054',
-                'name' => 'Методика на информатиката',
-                'name_mk' => 'Методика на информатиката',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S073',
-                'name' => 'Agent-based systems',
-                'name_mk' => 'Agent-based systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S138',
-                'name' => 'Advanced Databases',
-                'name_mk' => 'Advanced Databases',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W108',
-                'name' => 'IoT',
-                'name_mk' => 'IoT',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W067',
-                'name' => 'Основи на теоријата на информации',
-                'name_mk' => 'Основи на теоријата на информации',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S163',
-                'name' => 'Статистичко моделирање',
-                'name_mk' => 'Статистичко моделирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S040',
-                'name' => 'Embedded microprocessor systems',
-                'name_mk' => 'Embedded microprocessor systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W027',
-                'name' => 'Менаџмент информациски системи',
-                'name_mk' => 'Менаџмент информациски системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W041',
-                'name' => 'Дизајн на дигитални кола',
-                'name_mk' => 'Дизајн на дигитални кола',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S150',
-                'name' => 'Data mining',
-                'name_mk' => 'Data mining',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W001',
-                'name' => 'Algorithms and Data Structures',
-                'name_mk' => 'Algorithms and Data Structures',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S090',
-                'name' => 'Вовед во случајни процеси',
-                'name_mk' => 'Вовед во случајни процеси',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W033',
-                'name' => 'Калкулус 1',
-                'name_mk' => 'Калкулус 1',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S039',
-                'name' => 'Formal languages and automata',
-                'name_mk' => 'Formal languages and automata',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S042',
-                'name' => 'Electric Circuits',
-                'name_mk' => 'Electric Circuits',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S111',
-                'name' => 'Инфраструктурно програмирање',
-                'name_mk' => 'Инфраструктурно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W011',
-                'name' => 'Discrete Mathematics',
-                'name_mk' => 'Discrete Mathematics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S016',
-                'name' => 'Object oriented programming',
-                'name_mk' => 'Object oriented programming',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W088',
-                'name' => 'Introduction to Smart Cities',
-                'name_mk' => 'Introduction to Smart Cities',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W009',
-                'name' => 'Software Design and Architecture',
-                'name_mk' => 'Software Design and Architecture',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S110',
-                'name' => 'Интернет технологии',
-                'name_mk' => 'Интернет технологии',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S099',
-                'name' => 'E-government',
-                'name_mk' => 'E-government',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S032',
-                'name' => 'Дискретни структури 2',
-                'name_mk' => 'Дискретни структури 2',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S149',
-                'name' => 'Parallel programming',
-                'name_mk' => 'Parallel programming',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W156',
-                'name' => 'Decision support systems',
-                'name_mk' => 'Decision support systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S112',
-                'name' => 'Програмски јазици и компајлери',
-                'name_mk' => 'Програмски јазици и компајлери',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S083',
-                'name' => 'Виртуелна реалност',
-                'name_mk' => 'Виртуелна реалност',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W053',
-                'name' => 'Computer ethics',
-                'name_mk' => 'Computer ethics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W014',
-                'name' => 'Computer Networks and Security',
-                'name_mk' => 'Computer Networks and Security',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S084',
-                'name' => 'Вовед во екоинформатиката',
-                'name_mk' => 'Вовед во екоинформатиката',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S157',
-                'name' => 'Data Warehouses and OLAP',
-                'name_mk' => 'Data Warehouses and OLAP',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S010',
-                'name' => 'Human-computer interaction design',
-                'name_mk' => 'Human-computer interaction design',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S077',
-                'name' => 'Безжични мултимедиски системи',
-                'name_mk' => 'Безжични мултимедиски системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S132',
-                'name' => 'Модерни трендови во роботика',
-                'name_mk' => 'Модерни трендови во роботика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S135',
-                'name' => 'Multimedia systems',
-                'name_mk' => 'Multimedia systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W167',
-                'name' => 'User interfaces design patterns',
-                'name_mk' => 'User interfaces design patterns',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W133',
-                'name' => 'Мрежна и мобилна форензика',
-                'name_mk' => 'Мрежна и мобилна форензика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S124',
-                'name' => 'Медиуми и комуникации',
-                'name_mk' => 'Медиуми и комуникации',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S119',
-                'name' => 'Концепти на информатичко општество',
-                'name_mk' => 'Концепти на информатичко општество',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S059',
-                'name' => 'Администрација на мрежи',
-                'name_mk' => 'Администрација на мрежи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S153',
-                'name' => 'Процесна роботика',
-                'name_mk' => 'Процесна роботика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W021',
-                'name' => 'Тимски проект',
-                'name_mk' => 'Тимски проект',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W065',
-                'name' => 'Мрежна безбедност',
-                'name_mk' => 'Мрежна безбедност',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W134',
-                'name' => 'Multimedia Networks',
-                'name_mk' => 'Multimedia Networks',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S106',
-                'name' => 'Intelligent Information Systems',
-                'name_mk' => 'Intelligent Information Systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S034',
-                'name' => 'Калкулус 2',
-                'name_mk' => 'Калкулус 2',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W145',
-                'name' => 'Оптички мрежи',
-                'name_mk' => 'Оптички мрежи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S061',
-                'name' => 'Wireless mobile systems',
-                'name_mk' => 'Wireless mobile systems',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W049',
-                'name' => 'Физика',
-                'name_mk' => 'Физика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S022',
-                'name' => 'Управување со ИКТ проекти',
-                'name_mk' => 'Управување со ИКТ проекти',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S084',
-                'name' => 'Introduction to Ecoinformatics',
-                'name_mk' => 'Introduction to Ecoinformatics',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S071',
-                'name' => 'Психологија на училишна возраст',
-                'name_mk' => 'Психологија на училишна возраст',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S101',
-                'name' => 'Етичко хакирање',
-                'name_mk' => 'Етичко хакирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S026',
-                'name' => 'Marketing',
-                'name_mk' => 'Marketing',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W115',
-                'name' => 'Компјутерски звук, говор и музика',
-                'name_mk' => 'Компјутерски звук, говор и музика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W035',
-                'name' => 'Linear algebra and applications',
-                'name_mk' => 'Linear algebra and applications',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S122',
-                'name' => 'Криптографија',
-                'name_mk' => 'Криптографија',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S166',
-                'name' => 'Учење на далечина',
-                'name_mk' => 'Учење на далечина',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S078',
-                'name' => 'Биолошки инспирирано пресметување',
-                'name_mk' => 'Биолошки инспирирано пресметување',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1W070',
-                'name' => 'Педагогија',
-                'name_mk' => 'Педагогија',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W140',
-                'name' => 'Напредно програмирање',
-                'name_mk' => 'Напредно програмирање',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S116',
-                'name' => 'Computer Components',
-                'name_mk' => 'Computer Components',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W117',
-                'name' => 'Компјутерски поддржано производство',
-                'name_mk' => 'Компјутерски поддржано производство',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S094',
-                'name' => 'Дигитални библиотеки',
-                'name_mk' => 'Дигитални библиотеки',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S029',
-                'name' => 'Софтверско инженерство',
-                'name_mk' => 'Софтверско инженерство',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2W147',
-                'name' => 'Основи на комуникациски системи',
-                'name_mk' => 'Основи на комуникациски системи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W131',
-                'name' => 'Моделирање и симулација',
-                'name_mk' => 'Моделирање и симулација',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W076',
-                'name' => 'Вовед во анализа на временските серии',
-                'name_mk' => 'Вовед во анализа на временските серии',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L1S052',
-                'name' => 'ИТ системи за учење',
-                'name_mk' => 'ИТ системи за учење',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 1,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S047',
-                'name' => 'Signal processing',
-                'name_mk' => 'Signal processing',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S056',
-                'name' => 'Персонализирано учење',
-                'name_mk' => 'Персонализирано учење',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W055',
-                'name' => 'Мултимедија лни технологии',
-                'name_mk' => 'Мултимедија лни технологии',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L2S095',
-                'name' => 'Дигитално процесирање на слика',
-                'name_mk' => 'Дигитално процесирање на слика',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 2,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3W050',
-                'name' => 'Дизајн на образовен софтвер',
-                'name_mk' => 'Дизајн на образовен софтвер',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-            [
-                'code' => 'F18L3S063',
-                'name' => 'Дизајн на компјутерски мрежи',
-                'name_mk' => 'Дизајн на компјутерски мрежи',
-                'description' => '',
-                'description_mk' => '',
-                'year' => 3,
-                'semester_type' => 'winter',
-                'subject_type' => 'mandatory',
-                'credits' => 6,
-                'lecture_hours' => 30,
-                'practice_hours' => 60,
-            ],
-        ];
-
-        foreach ($subjects as $subject) {
-            Subject::create($subject);
-        }
-    }
-}
Index: eslint.config.js
===================================================================
--- eslint.config.js	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ eslint.config.js	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,44 @@
+import js from '@eslint/js';
+import prettier from 'eslint-config-prettier';
+import react from 'eslint-plugin-react';
+import reactHooks from 'eslint-plugin-react-hooks';
+import globals from 'globals';
+import typescript from 'typescript-eslint';
+
+/** @type {import('eslint').Linter.Config[]} */
+export default [
+    js.configs.recommended,
+    ...typescript.configs.recommended,
+    {
+        ...react.configs.flat.recommended,
+        ...react.configs.flat['jsx-runtime'], // Required for React 17+
+        languageOptions: {
+            globals: {
+                ...globals.browser,
+            },
+        },
+        rules: {
+            'react/react-in-jsx-scope': 'off',
+            'react/prop-types': 'off',
+            'react/no-unescaped-entities': 'off',
+        },
+        settings: {
+            react: {
+                version: 'detect',
+            },
+        },
+    },
+    {
+        plugins: {
+            'react-hooks': reactHooks,
+        },
+        rules: {
+            'react-hooks/rules-of-hooks': 'error',
+            'react-hooks/exhaustive-deps': 'warn',
+        },
+    },
+    {
+        ignores: ['vendor', 'node_modules', 'public', 'bootstrap/ssr', 'tailwind.config.js'],
+    },
+    prettier, // Turn off all rules that might conflict with Prettier
+];
Index: package-lock.json
===================================================================
--- package-lock.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ package-lock.json	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,42 +1,343 @@
 {
-    "name": "roadmap_finki",
+    "name": "react-starter-kit",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
+            "dependencies": {
+                "@headlessui/react": "^2.2.0",
+                "@inertiajs/react": "^2.0.0",
+                "@radix-ui/react-avatar": "^1.1.3",
+                "@radix-ui/react-checkbox": "^1.1.4",
+                "@radix-ui/react-collapsible": "^1.1.3",
+                "@radix-ui/react-dialog": "^1.1.6",
+                "@radix-ui/react-dropdown-menu": "^2.1.6",
+                "@radix-ui/react-label": "^2.1.2",
+                "@radix-ui/react-navigation-menu": "^1.2.5",
+                "@radix-ui/react-select": "^2.1.6",
+                "@radix-ui/react-separator": "^1.1.2",
+                "@radix-ui/react-slot": "^1.1.2",
+                "@radix-ui/react-toggle": "^1.1.2",
+                "@radix-ui/react-toggle-group": "^1.1.2",
+                "@radix-ui/react-tooltip": "^1.1.8",
+                "@tailwindcss/vite": "^4.0.6",
+                "@types/react": "^19.0.3",
+                "@types/react-dom": "^19.0.2",
+                "@vitejs/plugin-react": "^4.3.4",
+                "class-variance-authority": "^0.7.1",
+                "clsx": "^2.1.1",
+                "concurrently": "^9.0.1",
+                "globals": "^15.14.0",
+                "laravel-vite-plugin": "^1.0",
+                "lucide-react": "^0.475.0",
+                "react": "^19.0.0",
+                "react-dom": "^19.0.0",
+                "tailwind-merge": "^3.0.1",
+                "tailwindcss": "^4.0.0",
+                "tailwindcss-animate": "^1.0.7",
+                "typescript": "^5.7.2",
+                "vite": "^6.0"
+            },
             "devDependencies": {
-                "@tailwindcss/forms": "^0.5.2",
-                "@tailwindcss/vite": "^4.0.0",
-                "alpinejs": "^3.4.2",
-                "autoprefixer": "^10.4.2",
-                "axios": "^1.11.0",
-                "concurrently": "^9.0.1",
-                "laravel-vite-plugin": "^2.0.0",
-                "postcss": "^8.4.31",
-                "tailwindcss": "^3.1.0",
-                "vite": "^7.0.7"
-            }
-        },
-        "node_modules/@alloc/quick-lru": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
-            "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
+                "@eslint/js": "^9.19.0",
+                "@types/node": "^22.13.5",
+                "eslint": "^9.17.0",
+                "eslint-config-prettier": "^10.0.1",
+                "eslint-plugin-react": "^7.37.3",
+                "eslint-plugin-react-hooks": "^5.1.0",
+                "prettier": "^3.4.2",
+                "prettier-plugin-organize-imports": "^4.1.0",
+                "prettier-plugin-tailwindcss": "^0.6.11",
+                "typescript-eslint": "^8.23.0"
+            },
+            "optionalDependencies": {
+                "@rollup/rollup-linux-x64-gnu": "4.9.5",
+                "@tailwindcss/oxide-linux-x64-gnu": "^4.0.1",
+                "lightningcss-linux-x64-gnu": "^1.29.1"
+            }
+        },
+        "node_modules/@ampproject/remapping": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+            "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@jridgewell/gen-mapping": "^0.3.5",
+                "@jridgewell/trace-mapping": "^0.3.24"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@babel/code-frame": {
+            "version": "7.26.2",
+            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+            "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-validator-identifier": "^7.25.9",
+                "js-tokens": "^4.0.0",
+                "picocolors": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/compat-data": {
+            "version": "7.26.8",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
+            "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/core": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
+            "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
+            "license": "MIT",
+            "dependencies": {
+                "@ampproject/remapping": "^2.2.0",
+                "@babel/code-frame": "^7.26.2",
+                "@babel/generator": "^7.26.9",
+                "@babel/helper-compilation-targets": "^7.26.5",
+                "@babel/helper-module-transforms": "^7.26.0",
+                "@babel/helpers": "^7.26.9",
+                "@babel/parser": "^7.26.9",
+                "@babel/template": "^7.26.9",
+                "@babel/traverse": "^7.26.9",
+                "@babel/types": "^7.26.9",
+                "convert-source-map": "^2.0.0",
+                "debug": "^4.1.0",
+                "gensync": "^1.0.0-beta.2",
+                "json5": "^2.2.3",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/babel"
+            }
+        },
+        "node_modules/@babel/generator": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
+            "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/parser": "^7.26.9",
+                "@babel/types": "^7.26.9",
+                "@jridgewell/gen-mapping": "^0.3.5",
+                "@jridgewell/trace-mapping": "^0.3.25",
+                "jsesc": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-compilation-targets": {
+            "version": "7.26.5",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+            "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/compat-data": "^7.26.5",
+                "@babel/helper-validator-option": "^7.25.9",
+                "browserslist": "^4.24.0",
+                "lru-cache": "^5.1.1",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-module-imports": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+            "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/traverse": "^7.25.9",
+                "@babel/types": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-module-transforms": {
+            "version": "7.26.0",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+            "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-module-imports": "^7.25.9",
+                "@babel/helper-validator-identifier": "^7.25.9",
+                "@babel/traverse": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0"
+            }
+        },
+        "node_modules/@babel/helper-plugin-utils": {
+            "version": "7.26.5",
+            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+            "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-string-parser": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+            "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-validator-identifier": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+            "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-validator-option": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+            "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helpers": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
+            "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/template": "^7.26.9",
+                "@babel/types": "^7.26.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/parser": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+            "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/types": "^7.26.9"
+            },
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@babel/plugin-transform-react-jsx-self": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
+            "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
+        },
+        "node_modules/@babel/plugin-transform-react-jsx-source": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
+            "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-plugin-utils": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "peerDependencies": {
+                "@babel/core": "^7.0.0-0"
+            }
+        },
+        "node_modules/@babel/template": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
+            "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/code-frame": "^7.26.2",
+                "@babel/parser": "^7.26.9",
+                "@babel/types": "^7.26.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/traverse": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
+            "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/code-frame": "^7.26.2",
+                "@babel/generator": "^7.26.9",
+                "@babel/parser": "^7.26.9",
+                "@babel/template": "^7.26.9",
+                "@babel/types": "^7.26.9",
+                "debug": "^4.3.1",
+                "globals": "^11.1.0"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/traverse/node_modules/globals": {
+            "version": "11.12.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=4"
+            }
+        },
+        "node_modules/@babel/types": {
+            "version": "7.26.9",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+            "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-string-parser": "^7.25.9",
+                "@babel/helper-validator-identifier": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
         "node_modules/@esbuild/aix-ppc64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
-            "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
+            "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
             "cpu": [
                 "ppc64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -49,11 +350,10 @@
         },
         "node_modules/@esbuild/android-arm": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
-            "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
+            "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -66,11 +366,10 @@
         },
         "node_modules/@esbuild/android-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
-            "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
+            "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -83,11 +382,10 @@
         },
         "node_modules/@esbuild/android-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
-            "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
+            "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -100,11 +398,10 @@
         },
         "node_modules/@esbuild/darwin-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
-            "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
+            "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -117,11 +414,10 @@
         },
         "node_modules/@esbuild/darwin-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
-            "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
+            "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -134,11 +430,10 @@
         },
         "node_modules/@esbuild/freebsd-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
-            "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
+            "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -151,11 +446,10 @@
         },
         "node_modules/@esbuild/freebsd-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
-            "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
+            "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -168,11 +462,10 @@
         },
         "node_modules/@esbuild/linux-arm": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
-            "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
+            "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -185,11 +478,10 @@
         },
         "node_modules/@esbuild/linux-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
-            "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
+            "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -202,11 +494,10 @@
         },
         "node_modules/@esbuild/linux-ia32": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
-            "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
+            "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
             "cpu": [
                 "ia32"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -219,11 +510,10 @@
         },
         "node_modules/@esbuild/linux-loong64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
-            "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
+            "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
             "cpu": [
                 "loong64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -236,11 +526,10 @@
         },
         "node_modules/@esbuild/linux-mips64el": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
-            "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
+            "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
             "cpu": [
                 "mips64el"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -253,11 +542,10 @@
         },
         "node_modules/@esbuild/linux-ppc64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
-            "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
+            "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
             "cpu": [
                 "ppc64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -270,11 +558,10 @@
         },
         "node_modules/@esbuild/linux-riscv64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
-            "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
+            "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
             "cpu": [
                 "riscv64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -287,11 +574,10 @@
         },
         "node_modules/@esbuild/linux-s390x": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
-            "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
+            "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
             "cpu": [
                 "s390x"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -304,11 +590,10 @@
         },
         "node_modules/@esbuild/linux-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
-            "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
+            "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -321,11 +606,10 @@
         },
         "node_modules/@esbuild/netbsd-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
-            "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
+            "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -338,11 +622,10 @@
         },
         "node_modules/@esbuild/netbsd-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
-            "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
+            "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -355,11 +638,10 @@
         },
         "node_modules/@esbuild/openbsd-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
-            "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
+            "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -372,11 +654,10 @@
         },
         "node_modules/@esbuild/openbsd-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
-            "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
+            "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -388,29 +669,11 @@
             }
         },
-        "node_modules/@esbuild/openharmony-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
-            "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "openharmony"
-            ],
-            "engines": {
-                "node": ">=18"
-            }
-        },
         "node_modules/@esbuild/sunos-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
-            "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
+            "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -423,11 +686,10 @@
         },
         "node_modules/@esbuild/win32-arm64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
-            "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
+            "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -440,11 +702,10 @@
         },
         "node_modules/@esbuild/win32-ia32": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
-            "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
+            "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
             "cpu": [
                 "ia32"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -457,11 +718,10 @@
         },
         "node_modules/@esbuild/win32-x64": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
-            "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
+            "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -473,24 +733,319 @@
             }
         },
+        "node_modules/@eslint-community/eslint-utils": {
+            "version": "4.4.1",
+            "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+            "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "eslint-visitor-keys": "^3.4.3"
+            },
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+            }
+        },
+        "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+            "version": "3.4.3",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+            "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/@eslint-community/regexpp": {
+            "version": "4.12.1",
+            "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+            "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+            }
+        },
+        "node_modules/@eslint/config-array": {
+            "version": "0.19.2",
+            "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+            "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@eslint/object-schema": "^2.1.6",
+                "debug": "^4.3.1",
+                "minimatch": "^3.1.2"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
+        "node_modules/@eslint/core": {
+            "version": "0.12.0",
+            "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
+            "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@types/json-schema": "^7.0.15"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
+        "node_modules/@eslint/eslintrc": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
+            "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "ajv": "^6.12.4",
+                "debug": "^4.3.2",
+                "espree": "^10.0.1",
+                "globals": "^14.0.0",
+                "ignore": "^5.2.0",
+                "import-fresh": "^3.2.1",
+                "js-yaml": "^4.1.0",
+                "minimatch": "^3.1.2",
+                "strip-json-comments": "^3.1.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/@eslint/eslintrc/node_modules/globals": {
+            "version": "14.0.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+            "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/@eslint/js": {
+            "version": "9.21.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
+            "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
+        "node_modules/@eslint/object-schema": {
+            "version": "2.1.6",
+            "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+            "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
+        "node_modules/@eslint/plugin-kit": {
+            "version": "0.2.7",
+            "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
+            "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@eslint/core": "^0.12.0",
+                "levn": "^0.4.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
+        "node_modules/@floating-ui/core": {
+            "version": "1.6.9",
+            "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
+            "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/utils": "^0.2.9"
+            }
+        },
+        "node_modules/@floating-ui/dom": {
+            "version": "1.6.13",
+            "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
+            "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/core": "^1.6.0",
+                "@floating-ui/utils": "^0.2.9"
+            }
+        },
+        "node_modules/@floating-ui/react": {
+            "version": "0.26.28",
+            "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+            "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/react-dom": "^2.1.2",
+                "@floating-ui/utils": "^0.2.8",
+                "tabbable": "^6.0.0"
+            },
+            "peerDependencies": {
+                "react": ">=16.8.0",
+                "react-dom": ">=16.8.0"
+            }
+        },
+        "node_modules/@floating-ui/react-dom": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+            "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/dom": "^1.0.0"
+            },
+            "peerDependencies": {
+                "react": ">=16.8.0",
+                "react-dom": ">=16.8.0"
+            }
+        },
+        "node_modules/@floating-ui/utils": {
+            "version": "0.2.9",
+            "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
+            "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
+            "license": "MIT"
+        },
+        "node_modules/@headlessui/react": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.0.tgz",
+            "integrity": "sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/react": "^0.26.16",
+                "@react-aria/focus": "^3.17.1",
+                "@react-aria/interactions": "^3.21.3",
+                "@tanstack/react-virtual": "^3.8.1"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "react": "^18 || ^19 || ^19.0.0-rc",
+                "react-dom": "^18 || ^19 || ^19.0.0-rc"
+            }
+        },
+        "node_modules/@humanfs/core": {
+            "version": "0.19.1",
+            "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+            "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=18.18.0"
+            }
+        },
+        "node_modules/@humanfs/node": {
+            "version": "0.16.6",
+            "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+            "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@humanfs/core": "^0.19.1",
+                "@humanwhocodes/retry": "^0.3.0"
+            },
+            "engines": {
+                "node": ">=18.18.0"
+            }
+        },
+        "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+            "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=18.18"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/nzakas"
+            }
+        },
+        "node_modules/@humanwhocodes/module-importer": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+            "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=12.22"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/nzakas"
+            }
+        },
+        "node_modules/@humanwhocodes/retry": {
+            "version": "0.4.2",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+            "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=18.18"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/nzakas"
+            }
+        },
+        "node_modules/@inertiajs/core": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.4.tgz",
+            "integrity": "sha512-gCUqpwBRYOhz0hwBDWca2lkk+Mc+36GvbRoE0rEvYFpzQAMMP0xFhH9h8hr7VWTn+vVOZRuDvakI+4cazwtvCg==",
+            "license": "MIT",
+            "dependencies": {
+                "axios": "^1.6.0",
+                "deepmerge": "^4.0.0",
+                "qs": "^6.9.0"
+            }
+        },
+        "node_modules/@inertiajs/react": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-2.0.4.tgz",
+            "integrity": "sha512-syPqZNVU5v0DB3VHCm9aVQafJ9kgkxtC5lfc4WOTBxtUjZjbJYDwt5d0yLOhyfU4S7d9CR0dhlkkEt1DsedD3Q==",
+            "license": "MIT",
+            "dependencies": {
+                "@inertiajs/core": "2.0.4",
+                "lodash.isequal": "^4.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+            }
+        },
         "node_modules/@jridgewell/gen-mapping": {
-            "version": "0.3.13",
-            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
-            "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@jridgewell/sourcemap-codec": "^1.5.0",
+            "version": "0.3.8",
+            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+            "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+            "license": "MIT",
+            "dependencies": {
+                "@jridgewell/set-array": "^1.2.1",
+                "@jridgewell/sourcemap-codec": "^1.4.10",
                 "@jridgewell/trace-mapping": "^0.3.24"
-            }
-        },
-        "node_modules/@jridgewell/remapping": {
-            "version": "2.3.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
-            "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@jridgewell/gen-mapping": "^0.3.5",
-                "@jridgewell/trace-mapping": "^0.3.24"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
@@ -499,5 +1054,4 @@
             "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
             "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -505,16 +1059,23 @@
             }
         },
+        "node_modules/@jridgewell/set-array": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+            "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
         "node_modules/@jridgewell/sourcemap-codec": {
-            "version": "1.5.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
-            "dev": true,
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+            "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
             "license": "MIT"
         },
         "node_modules/@jridgewell/trace-mapping": {
-            "version": "0.3.31",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
-            "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
-            "dev": true,
+            "version": "0.3.25",
+            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+            "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
             "license": "MIT",
             "dependencies": {
@@ -561,12 +1122,990 @@
             }
         },
+        "node_modules/@radix-ui/number": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+            "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==",
+            "license": "MIT"
+        },
+        "node_modules/@radix-ui/primitive": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
+            "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==",
+            "license": "MIT"
+        },
+        "node_modules/@radix-ui/react-arrow": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz",
+            "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-primitive": "2.0.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-avatar": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.3.tgz",
+            "integrity": "sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-checkbox": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.4.tgz",
+            "integrity": "sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "@radix-ui/react-use-previous": "1.1.0",
+                "@radix-ui/react-use-size": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-collapsible": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz",
+            "integrity": "sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-collection": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz",
+            "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-slot": "1.1.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-compose-refs": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
+            "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-context": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
+            "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-dialog": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz",
+            "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-dismissable-layer": "1.1.5",
+                "@radix-ui/react-focus-guards": "1.1.1",
+                "@radix-ui/react-focus-scope": "1.1.2",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-portal": "1.1.4",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-slot": "1.1.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "aria-hidden": "^1.2.4",
+                "react-remove-scroll": "^2.6.3"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-direction": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+            "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-dismissable-layer": {
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz",
+            "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-escape-keydown": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-dropdown-menu": {
+            "version": "2.1.6",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz",
+            "integrity": "sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-menu": "2.1.6",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-focus-guards": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
+            "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-focus-scope": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz",
+            "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-id": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+            "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-label": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.2.tgz",
+            "integrity": "sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-primitive": "2.0.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-menu": {
+            "version": "2.1.6",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.6.tgz",
+            "integrity": "sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-collection": "1.1.2",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-direction": "1.1.0",
+                "@radix-ui/react-dismissable-layer": "1.1.5",
+                "@radix-ui/react-focus-guards": "1.1.1",
+                "@radix-ui/react-focus-scope": "1.1.2",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-popper": "1.2.2",
+                "@radix-ui/react-portal": "1.1.4",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-roving-focus": "1.1.2",
+                "@radix-ui/react-slot": "1.1.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "aria-hidden": "^1.2.4",
+                "react-remove-scroll": "^2.6.3"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-navigation-menu": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.5.tgz",
+            "integrity": "sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-collection": "1.1.2",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-direction": "1.1.0",
+                "@radix-ui/react-dismissable-layer": "1.1.5",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "@radix-ui/react-use-layout-effect": "1.1.0",
+                "@radix-ui/react-use-previous": "1.1.0",
+                "@radix-ui/react-visually-hidden": "1.1.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-popper": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz",
+            "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==",
+            "license": "MIT",
+            "dependencies": {
+                "@floating-ui/react-dom": "^2.0.0",
+                "@radix-ui/react-arrow": "1.1.2",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-layout-effect": "1.1.0",
+                "@radix-ui/react-use-rect": "1.1.0",
+                "@radix-ui/react-use-size": "1.1.0",
+                "@radix-ui/rect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-portal": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz",
+            "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-presence": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
+            "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-primitive": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz",
+            "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-slot": "1.1.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-roving-focus": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz",
+            "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-collection": "1.1.2",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-direction": "1.1.0",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-controllable-state": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-select": {
+            "version": "2.1.6",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz",
+            "integrity": "sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/number": "1.1.0",
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-collection": "1.1.2",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-direction": "1.1.0",
+                "@radix-ui/react-dismissable-layer": "1.1.5",
+                "@radix-ui/react-focus-guards": "1.1.1",
+                "@radix-ui/react-focus-scope": "1.1.2",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-popper": "1.2.2",
+                "@radix-ui/react-portal": "1.1.4",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-slot": "1.1.2",
+                "@radix-ui/react-use-callback-ref": "1.1.0",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "@radix-ui/react-use-layout-effect": "1.1.0",
+                "@radix-ui/react-use-previous": "1.1.0",
+                "@radix-ui/react-visually-hidden": "1.1.2",
+                "aria-hidden": "^1.2.4",
+                "react-remove-scroll": "^2.6.3"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-separator": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz",
+            "integrity": "sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-primitive": "2.0.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-slot": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
+            "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-compose-refs": "1.1.1"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-toggle": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.2.tgz",
+            "integrity": "sha512-lntKchNWx3aCHuWKiDY+8WudiegQvBpDRAYL8dKLRvKEH8VOpl0XX6SSU/bUBqIRJbcTy4+MW06Wv8vgp10rzQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-toggle-group": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.2.tgz",
+            "integrity": "sha512-JBm6s6aVG/nwuY5eadhU2zDi/IwYS0sDM5ZWb4nymv/hn3hZdkw+gENn0LP4iY1yCd7+bgJaCwueMYJIU3vk4A==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-direction": "1.1.0",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-roving-focus": "1.1.2",
+                "@radix-ui/react-toggle": "1.1.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-tooltip": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz",
+            "integrity": "sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/primitive": "1.1.1",
+                "@radix-ui/react-compose-refs": "1.1.1",
+                "@radix-ui/react-context": "1.1.1",
+                "@radix-ui/react-dismissable-layer": "1.1.5",
+                "@radix-ui/react-id": "1.1.0",
+                "@radix-ui/react-popper": "1.2.2",
+                "@radix-ui/react-portal": "1.1.4",
+                "@radix-ui/react-presence": "1.1.2",
+                "@radix-ui/react-primitive": "2.0.2",
+                "@radix-ui/react-slot": "1.1.2",
+                "@radix-ui/react-use-controllable-state": "1.1.0",
+                "@radix-ui/react-visually-hidden": "1.1.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-callback-ref": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+            "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-controllable-state": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+            "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-use-callback-ref": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-escape-keydown": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+            "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-use-callback-ref": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-layout-effect": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+            "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-previous": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+            "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-rect": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+            "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/rect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-use-size": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+            "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-use-layout-effect": "1.1.0"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/react-visually-hidden": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz",
+            "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==",
+            "license": "MIT",
+            "dependencies": {
+                "@radix-ui/react-primitive": "2.0.2"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+                "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@radix-ui/rect": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+            "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==",
+            "license": "MIT"
+        },
+        "node_modules/@react-aria/focus": {
+            "version": "3.19.1",
+            "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.19.1.tgz",
+            "integrity": "sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@react-aria/interactions": "^3.23.0",
+                "@react-aria/utils": "^3.27.0",
+                "@react-types/shared": "^3.27.0",
+                "@swc/helpers": "^0.5.0",
+                "clsx": "^2.0.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
+        "node_modules/@react-aria/interactions": {
+            "version": "3.23.0",
+            "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.23.0.tgz",
+            "integrity": "sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@react-aria/ssr": "^3.9.7",
+                "@react-aria/utils": "^3.27.0",
+                "@react-types/shared": "^3.27.0",
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
+        "node_modules/@react-aria/ssr": {
+            "version": "3.9.7",
+            "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz",
+            "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@swc/helpers": "^0.5.0"
+            },
+            "engines": {
+                "node": ">= 12"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
+        "node_modules/@react-aria/utils": {
+            "version": "3.27.0",
+            "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.27.0.tgz",
+            "integrity": "sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@react-aria/ssr": "^3.9.7",
+                "@react-stately/utils": "^3.10.5",
+                "@react-types/shared": "^3.27.0",
+                "@swc/helpers": "^0.5.0",
+                "clsx": "^2.0.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+                "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
+        "node_modules/@react-stately/utils": {
+            "version": "3.10.5",
+            "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz",
+            "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@swc/helpers": "^0.5.0"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
+        "node_modules/@react-types/shared": {
+            "version": "3.27.0",
+            "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.27.0.tgz",
+            "integrity": "sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==",
+            "license": "Apache-2.0",
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+            }
+        },
         "node_modules/@rollup/rollup-android-arm-eabi": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
-            "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz",
+            "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -576,11 +2115,10 @@
         },
         "node_modules/@rollup/rollup-android-arm64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
-            "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz",
+            "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -590,11 +2128,10 @@
         },
         "node_modules/@rollup/rollup-darwin-arm64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
-            "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz",
+            "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -604,11 +2141,10 @@
         },
         "node_modules/@rollup/rollup-darwin-x64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
-            "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz",
+            "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -618,11 +2154,10 @@
         },
         "node_modules/@rollup/rollup-freebsd-arm64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
-            "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz",
+            "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -632,11 +2167,10 @@
         },
         "node_modules/@rollup/rollup-freebsd-x64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
-            "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz",
+            "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -646,11 +2180,10 @@
         },
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
-            "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz",
+            "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -660,11 +2193,10 @@
         },
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
-            "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz",
+            "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -674,11 +2206,10 @@
         },
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
-            "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz",
+            "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -688,11 +2219,10 @@
         },
         "node_modules/@rollup/rollup-linux-arm64-musl": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
-            "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz",
+            "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -701,12 +2231,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-loong64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
-            "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+        "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz",
+            "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==",
             "cpu": [
                 "loong64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -715,12 +2244,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-ppc64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
-            "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+        "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz",
+            "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==",
             "cpu": [
                 "ppc64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -730,11 +2258,10 @@
         },
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
-            "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz",
+            "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==",
             "cpu": [
                 "riscv64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -743,12 +2270,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-riscv64-musl": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
-            "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
+        "node_modules/@rollup/rollup-linux-s390x-gnu": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz",
+            "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==",
             "cpu": [
-                "riscv64"
-            ],
-            "dev": true,
+                "s390x"
+            ],
             "license": "MIT",
             "optional": true,
@@ -757,12 +2283,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-s390x-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
-            "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+        "node_modules/@rollup/rollup-linux-x64-gnu": {
+            "version": "4.9.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz",
+            "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==",
             "cpu": [
-                "s390x"
-            ],
-            "dev": true,
+                "x64"
+            ],
             "license": "MIT",
             "optional": true,
@@ -771,12 +2296,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-x64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
-            "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+        "node_modules/@rollup/rollup-linux-x64-musl": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz",
+            "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -785,40 +2309,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-linux-x64-musl": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
-            "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ]
-        },
-        "node_modules/@rollup/rollup-openharmony-arm64": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
-            "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+        "node_modules/@rollup/rollup-win32-arm64-msvc": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz",
+            "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "openharmony"
-            ]
-        },
-        "node_modules/@rollup/rollup-win32-arm64-msvc": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
-            "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -828,11 +2323,10 @@
         },
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
-            "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz",
+            "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==",
             "cpu": [
                 "ia32"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -841,12 +2335,11 @@
             ]
         },
-        "node_modules/@rollup/rollup-win32-x64-gnu": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
-            "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+        "node_modules/@rollup/rollup-win32-x64-msvc": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz",
+            "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -855,269 +2348,213 @@
             ]
         },
-        "node_modules/@rollup/rollup-win32-x64-msvc": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
-            "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+        "node_modules/@swc/helpers": {
+            "version": "0.5.15",
+            "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+            "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "tslib": "^2.8.0"
+            }
+        },
+        "node_modules/@tailwindcss/node": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.10.tgz",
+            "integrity": "sha512-5YuI8pXfNkg5Ng12wgMic6jrFe4K8+eVmaC1kLsbA6g7iMgrj5fyl4hoLqHjmBDGpJXKxUAjwMSuJmc4oetnrg==",
+            "license": "MIT",
+            "dependencies": {
+                "enhanced-resolve": "^5.18.1",
+                "jiti": "^2.4.2",
+                "tailwindcss": "4.0.10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.10.tgz",
+            "integrity": "sha512-vAPYXF1c2yH8jmepA82on3kLpgrHZQ0B7Q2tPeASXnKxJx3GP/Fe0j1RB6PDmR5UntwA0y0Z0bZYwLcnw4/OGw==",
+            "license": "MIT",
+            "engines": {
+                "node": ">= 10"
+            },
+            "optionalDependencies": {
+                "@tailwindcss/oxide-android-arm64": "4.0.10",
+                "@tailwindcss/oxide-darwin-arm64": "4.0.10",
+                "@tailwindcss/oxide-darwin-x64": "4.0.10",
+                "@tailwindcss/oxide-freebsd-x64": "4.0.10",
+                "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.10",
+                "@tailwindcss/oxide-linux-arm64-gnu": "4.0.10",
+                "@tailwindcss/oxide-linux-arm64-musl": "4.0.10",
+                "@tailwindcss/oxide-linux-x64-gnu": "4.0.10",
+                "@tailwindcss/oxide-linux-x64-musl": "4.0.10",
+                "@tailwindcss/oxide-win32-arm64-msvc": "4.0.10",
+                "@tailwindcss/oxide-win32-x64-msvc": "4.0.10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-android-arm64": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.10.tgz",
+            "integrity": "sha512-HymaBJV/oB7fAMabW/EdWBrNskw9BOXoChYVnk/n3xq9LpK3eWNOcLeB4P52Bks+OpAyv8u0I/0WdrOkPRPv0A==",
+            "cpu": [
+                "arm64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-darwin-arm64": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.10.tgz",
+            "integrity": "sha512-PJtNobUOQCydEpBbOmVhP+diTD8JEM7HRxgX9O72SODg+ynKDM0fNDkqKOX0CFR6+mCdOwRQdhnoulM6hM27TA==",
+            "cpu": [
+                "arm64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-darwin-x64": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.10.tgz",
+            "integrity": "sha512-jUqYWjThIoLEUTX5WGwukGh0js+RGGFqjt0YhQnDyCDofBD/CBxOdbrsXX6CnYmbGw+a3BDrl0r3xbPY2fX8Mw==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-freebsd-x64": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.10.tgz",
+            "integrity": "sha512-m4SdTo/MkZJX2FEyiOjtQAsKG17q9d/RJXTlXDu6owVIM/U9TG0Vy3XdW/L4Yh0mHsayhHUJVIpvV0ZaWMs7nQ==",
+            "cpu": [
+                "x64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "freebsd"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.10.tgz",
+            "integrity": "sha512-cdq+Xa4cgYOYgg2n8RdL2/COIuW0FZJRvSg+AtGuZWG0omVS9XIf/wLlL+ln7pCTMt9zGOX1Yyryfrw12tYw4Q==",
+            "cpu": [
+                "arm"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.10.tgz",
+            "integrity": "sha512-6PMpTsv8vE0xiaPnpOptSvO99JkIqW9KrtmPYp/Khr6i9AkVmf95XGQxqcgwlU7Gdo7eb02fK5z0c5crK/pTew==",
+            "cpu": [
+                "arm64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.10.tgz",
+            "integrity": "sha512-tI264V1H4yxRnYaOzYWm+5x94QtoreoBpVkX0OpQTycvnv6JPUC6wqsZkrDwpphaDitUGY+mv7rGQZ5vzB/Tlg==",
+            "cpu": [
+                "arm64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.10.tgz",
+            "integrity": "sha512-Xe15DqfzcYzozbhhgTUeZNnmnr56HdnqeollvLumxKvrCicDFkeZimz299Czyw4GeRUHZgcdccwr+Do3/Y2aZA==",
+            "cpu": [
+                "x64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.10.tgz",
+            "integrity": "sha512-L0NTk+UPpx4l/xD0G+UDBYhu6whA7xh415nErEnliFK8KV5lQlWz66icpHLmT4fTpAZTBaD+ul+GorlL1D1xCg==",
+            "cpu": [
+                "x64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">= 10"
+            }
+        },
+        "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.10.tgz",
+            "integrity": "sha512-IXNvUmLBmTJNcMofOl8B0fzNvwUFPNvFE799THaEPgi16zj+WqFLVQh4N5+zuI1vgtZTaIJrZmqHhjqNPLOItg==",
+            "cpu": [
+                "arm64"
+            ],
             "license": "MIT",
             "optional": true,
             "os": [
                 "win32"
-            ]
-        },
-        "node_modules/@tailwindcss/forms": {
-            "version": "0.5.10",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
-            "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "mini-svg-data-uri": "^1.2.3"
-            },
-            "peerDependencies": {
-                "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
-            }
-        },
-        "node_modules/@tailwindcss/node": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.17.tgz",
-            "integrity": "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@jridgewell/remapping": "^2.3.4",
-                "enhanced-resolve": "^5.18.3",
-                "jiti": "^2.6.1",
-                "lightningcss": "1.30.2",
-                "magic-string": "^0.30.21",
-                "source-map-js": "^1.2.1",
-                "tailwindcss": "4.1.17"
-            }
-        },
-        "node_modules/@tailwindcss/node/node_modules/tailwindcss": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz",
-            "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==",
-            "dev": true,
-            "license": "MIT"
-        },
-        "node_modules/@tailwindcss/oxide": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.17.tgz",
-            "integrity": "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==",
-            "dev": true,
-            "license": "MIT",
+            ],
             "engines": {
                 "node": ">= 10"
-            },
-            "optionalDependencies": {
-                "@tailwindcss/oxide-android-arm64": "4.1.17",
-                "@tailwindcss/oxide-darwin-arm64": "4.1.17",
-                "@tailwindcss/oxide-darwin-x64": "4.1.17",
-                "@tailwindcss/oxide-freebsd-x64": "4.1.17",
-                "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17",
-                "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17",
-                "@tailwindcss/oxide-linux-arm64-musl": "4.1.17",
-                "@tailwindcss/oxide-linux-x64-gnu": "4.1.17",
-                "@tailwindcss/oxide-linux-x64-musl": "4.1.17",
-                "@tailwindcss/oxide-wasm32-wasi": "4.1.17",
-                "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17",
-                "@tailwindcss/oxide-win32-x64-msvc": "4.1.17"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-android-arm64": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz",
-            "integrity": "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "android"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-darwin-arm64": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz",
-            "integrity": "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-darwin-x64": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz",
-            "integrity": "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==",
+            }
+        },
+        "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.10.tgz",
+            "integrity": "sha512-K/51OZBREcq2J4JE8r9qdX2qjnVfUrm8AT4R+Pd9E27AiIyr7IkLQQjR3mj2Lpb/jUtQ8NS0KkJ1nXMoQpSlkQ==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-freebsd-x64": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz",
-            "integrity": "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "freebsd"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz",
-            "integrity": "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==",
-            "cpu": [
-                "arm"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz",
-            "integrity": "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz",
-            "integrity": "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz",
-            "integrity": "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-linux-x64-musl": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz",
-            "integrity": "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "linux"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-wasm32-wasi": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz",
-            "integrity": "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==",
-            "bundleDependencies": [
-                "@napi-rs/wasm-runtime",
-                "@emnapi/core",
-                "@emnapi/runtime",
-                "@tybys/wasm-util",
-                "@emnapi/wasi-threads",
-                "tslib"
-            ],
-            "cpu": [
-                "wasm32"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "dependencies": {
-                "@emnapi/core": "^1.6.0",
-                "@emnapi/runtime": "^1.6.0",
-                "@emnapi/wasi-threads": "^1.1.0",
-                "@napi-rs/wasm-runtime": "^1.0.7",
-                "@tybys/wasm-util": "^0.10.1",
-                "tslib": "^2.4.0"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            }
-        },
-        "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz",
-            "integrity": "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
             "license": "MIT",
             "optional": true,
@@ -1129,75 +2566,404 @@
             }
         },
-        "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz",
-            "integrity": "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==",
-            "cpu": [
-                "x64"
-            ],
-            "dev": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "win32"
-            ],
-            "engines": {
-                "node": ">= 10"
-            }
-        },
         "node_modules/@tailwindcss/vite": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.17.tgz",
-            "integrity": "sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@tailwindcss/node": "4.1.17",
-                "@tailwindcss/oxide": "4.1.17",
-                "tailwindcss": "4.1.17"
-            },
-            "peerDependencies": {
-                "vite": "^5.2.0 || ^6 || ^7"
-            }
-        },
-        "node_modules/@tailwindcss/vite/node_modules/tailwindcss": {
-            "version": "4.1.17",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz",
-            "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==",
-            "dev": true,
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.10.tgz",
+            "integrity": "sha512-SFY/FgEj68k/6o3Q0PxoZK6KzQZV9T4yMy+kwOGq17NOWXAyDJ+Fagz3tkzqhzKpWTzMMPFfIo+g5r3seyp6uQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@tailwindcss/node": "4.0.10",
+                "@tailwindcss/oxide": "4.0.10",
+                "lightningcss": "^1.29.1",
+                "tailwindcss": "4.0.10"
+            },
+            "peerDependencies": {
+                "vite": "^5.2.0 || ^6"
+            }
+        },
+        "node_modules/@tanstack/react-virtual": {
+            "version": "3.13.2",
+            "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.2.tgz",
+            "integrity": "sha512-LceSUgABBKF6HSsHK2ZqHzQ37IKV/jlaWbHm+NyTa3/WNb/JZVcThDuTainf+PixltOOcFCYXwxbLpOX9sCx+g==",
+            "license": "MIT",
+            "dependencies": {
+                "@tanstack/virtual-core": "3.13.2"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/tannerlinsley"
+            },
+            "peerDependencies": {
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+            }
+        },
+        "node_modules/@tanstack/virtual-core": {
+            "version": "3.13.2",
+            "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.2.tgz",
+            "integrity": "sha512-Qzz4EgzMbO5gKrmqUondCjiHcuu4B1ftHb0pjCut661lXZdGoHeze9f/M8iwsK1t5LGR6aNuNGU7mxkowaW6RQ==",
+            "license": "MIT",
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/tannerlinsley"
+            }
+        },
+        "node_modules/@types/babel__core": {
+            "version": "7.20.5",
+            "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+            "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/parser": "^7.20.7",
+                "@babel/types": "^7.20.7",
+                "@types/babel__generator": "*",
+                "@types/babel__template": "*",
+                "@types/babel__traverse": "*"
+            }
+        },
+        "node_modules/@types/babel__generator": {
+            "version": "7.6.8",
+            "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+            "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/types": "^7.0.0"
+            }
+        },
+        "node_modules/@types/babel__template": {
+            "version": "7.4.4",
+            "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+            "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/parser": "^7.1.0",
+                "@babel/types": "^7.0.0"
+            }
+        },
+        "node_modules/@types/babel__traverse": {
+            "version": "7.20.6",
+            "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+            "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/types": "^7.20.7"
+            }
+        },
+        "node_modules/@types/estree": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+            "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
             "license": "MIT"
         },
-        "node_modules/@types/estree": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
-            "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+        "node_modules/@types/json-schema": {
+            "version": "7.0.15",
+            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
             "dev": true,
             "license": "MIT"
         },
-        "node_modules/@vue/reactivity": {
-            "version": "3.1.5",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
-            "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@vue/shared": "3.1.5"
-            }
-        },
-        "node_modules/@vue/shared": {
-            "version": "3.1.5",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
-            "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
-            "dev": true,
-            "license": "MIT"
-        },
-        "node_modules/alpinejs": {
-            "version": "3.15.2",
-            "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.2.tgz",
-            "integrity": "sha512-2kYF2aG+DTFkE6p0rHG5XmN4VEb6sO9b02aOdU4+i8QN6rL0DbRZQiypDE1gBcGO65yDcqMz5KKYUYgMUxgNkw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@vue/reactivity": "~3.1.1"
+        "node_modules/@types/node": {
+            "version": "22.13.9",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz",
+            "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==",
+            "devOptional": true,
+            "license": "MIT",
+            "dependencies": {
+                "undici-types": "~6.20.0"
+            }
+        },
+        "node_modules/@types/react": {
+            "version": "19.0.10",
+            "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz",
+            "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==",
+            "license": "MIT",
+            "dependencies": {
+                "csstype": "^3.0.2"
+            }
+        },
+        "node_modules/@types/react-dom": {
+            "version": "19.0.4",
+            "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
+            "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
+            "license": "MIT",
+            "peerDependencies": {
+                "@types/react": "^19.0.0"
+            }
+        },
+        "node_modules/@typescript-eslint/eslint-plugin": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz",
+            "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@eslint-community/regexpp": "^4.10.0",
+                "@typescript-eslint/scope-manager": "8.26.0",
+                "@typescript-eslint/type-utils": "8.26.0",
+                "@typescript-eslint/utils": "8.26.0",
+                "@typescript-eslint/visitor-keys": "8.26.0",
+                "graphemer": "^1.4.0",
+                "ignore": "^5.3.1",
+                "natural-compare": "^1.4.0",
+                "ts-api-utils": "^2.0.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+                "eslint": "^8.57.0 || ^9.0.0",
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/@typescript-eslint/parser": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz",
+            "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/scope-manager": "8.26.0",
+                "@typescript-eslint/types": "8.26.0",
+                "@typescript-eslint/typescript-estree": "8.26.0",
+                "@typescript-eslint/visitor-keys": "8.26.0",
+                "debug": "^4.3.4"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^8.57.0 || ^9.0.0",
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/@typescript-eslint/scope-manager": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
+            "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/types": "8.26.0",
+                "@typescript-eslint/visitor-keys": "8.26.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@typescript-eslint/type-utils": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz",
+            "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/typescript-estree": "8.26.0",
+                "@typescript-eslint/utils": "8.26.0",
+                "debug": "^4.3.4",
+                "ts-api-utils": "^2.0.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^8.57.0 || ^9.0.0",
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/@typescript-eslint/types": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
+            "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@typescript-eslint/typescript-estree": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
+            "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/types": "8.26.0",
+                "@typescript-eslint/visitor-keys": "8.26.0",
+                "debug": "^4.3.4",
+                "fast-glob": "^3.3.2",
+                "is-glob": "^4.0.3",
+                "minimatch": "^9.0.4",
+                "semver": "^7.6.0",
+                "ts-api-utils": "^2.0.1"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+            "version": "7.7.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+            "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+            "dev": true,
+            "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/@typescript-eslint/utils": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz",
+            "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@eslint-community/eslint-utils": "^4.4.0",
+                "@typescript-eslint/scope-manager": "8.26.0",
+                "@typescript-eslint/types": "8.26.0",
+                "@typescript-eslint/typescript-estree": "8.26.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^8.57.0 || ^9.0.0",
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/@typescript-eslint/visitor-keys": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
+            "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/types": "8.26.0",
+                "eslint-visitor-keys": "^4.2.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            }
+        },
+        "node_modules/@vitejs/plugin-react": {
+            "version": "4.3.4",
+            "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
+            "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/core": "^7.26.0",
+                "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+                "@babel/plugin-transform-react-jsx-source": "^7.25.9",
+                "@types/babel__core": "^7.20.5",
+                "react-refresh": "^0.14.2"
+            },
+            "engines": {
+                "node": "^14.18.0 || >=16.0.0"
+            },
+            "peerDependencies": {
+                "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
+            }
+        },
+        "node_modules/acorn": {
+            "version": "8.14.1",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+            "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+            "dev": true,
+            "license": "MIT",
+            "bin": {
+                "acorn": "bin/acorn"
+            },
+            "engines": {
+                "node": ">=0.4.0"
+            }
+        },
+        "node_modules/acorn-jsx": {
+            "version": "5.3.2",
+            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+            "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+            "dev": true,
+            "license": "MIT",
+            "peerDependencies": {
+                "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+            }
+        },
+        "node_modules/ajv": {
+            "version": "6.12.6",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "fast-deep-equal": "^3.1.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/epoberezkin"
             }
         },
@@ -1206,5 +2972,4 @@
             "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
             "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -1216,5 +2981,4 @@
             "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
             "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1228,31 +2992,168 @@
             }
         },
-        "node_modules/any-promise": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-            "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-            "dev": true,
-            "license": "MIT"
-        },
-        "node_modules/anymatch": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "normalize-path": "^3.0.0",
-                "picomatch": "^2.0.4"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/arg": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
-            "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
-            "dev": true,
-            "license": "MIT"
+        "node_modules/argparse": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+            "dev": true,
+            "license": "Python-2.0"
+        },
+        "node_modules/aria-hidden": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+            "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+            "license": "MIT",
+            "dependencies": {
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/array-buffer-byte-length": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+            "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "is-array-buffer": "^3.0.5"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/array-includes": {
+            "version": "3.1.8",
+            "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+            "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.4",
+                "is-string": "^1.0.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/array.prototype.findlast": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+            "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "es-shim-unscopables": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/array.prototype.flat": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+            "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.5",
+                "es-shim-unscopables": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/array.prototype.flatmap": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+            "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.5",
+                "es-shim-unscopables": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/array.prototype.tosorted": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+            "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.3",
+                "es-errors": "^1.3.0",
+                "es-shim-unscopables": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/arraybuffer.prototype.slice": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+            "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "array-buffer-byte-length": "^1.0.1",
+                "call-bind": "^1.0.8",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.5",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.6",
+                "is-array-buffer": "^3.0.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/async-function": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+            "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            }
         },
         "node_modules/asynckit": {
@@ -1260,78 +3161,49 @@
             "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
             "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-            "dev": true,
             "license": "MIT"
         },
-        "node_modules/autoprefixer": {
-            "version": "10.4.22",
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz",
-            "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/autoprefixer"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "license": "MIT",
-            "dependencies": {
-                "browserslist": "^4.27.0",
-                "caniuse-lite": "^1.0.30001754",
-                "fraction.js": "^5.3.4",
-                "normalize-range": "^0.1.2",
-                "picocolors": "^1.1.1",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "bin": {
-                "autoprefixer": "bin/autoprefixer"
-            },
-            "engines": {
-                "node": "^10 || ^12 || >=14"
-            },
-            "peerDependencies": {
-                "postcss": "^8.1.0"
+        "node_modules/available-typed-arrays": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+            "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "possible-typed-array-names": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/axios": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
-            "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
-            "dev": true,
+            "version": "1.8.1",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz",
+            "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==",
             "license": "MIT",
             "dependencies": {
                 "follow-redirects": "^1.15.6",
-                "form-data": "^4.0.4",
+                "form-data": "^4.0.0",
                 "proxy-from-env": "^1.1.0"
             }
         },
-        "node_modules/baseline-browser-mapping": {
-            "version": "2.8.32",
-            "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz",
-            "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==",
-            "dev": true,
-            "license": "Apache-2.0",
-            "bin": {
-                "baseline-browser-mapping": "dist/cli.js"
-            }
-        },
-        "node_modules/binary-extensions": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
-            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
+        "node_modules/balanced-match": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
             }
         },
@@ -1350,8 +3222,7 @@
         },
         "node_modules/browserslist": {
-            "version": "4.28.0",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
-            "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
-            "dev": true,
+            "version": "4.24.4",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+            "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
             "funding": [
                 {
@@ -1370,9 +3241,8 @@
             "license": "MIT",
             "dependencies": {
-                "baseline-browser-mapping": "^2.8.25",
-                "caniuse-lite": "^1.0.30001754",
-                "electron-to-chromium": "^1.5.249",
-                "node-releases": "^2.0.27",
-                "update-browserslist-db": "^1.1.4"
+                "caniuse-lite": "^1.0.30001688",
+                "electron-to-chromium": "^1.5.73",
+                "node-releases": "^2.0.19",
+                "update-browserslist-db": "^1.1.1"
             },
             "bin": {
@@ -1381,4 +3251,23 @@
             "engines": {
                 "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+            }
+        },
+        "node_modules/call-bind": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+            "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind-apply-helpers": "^1.0.0",
+                "es-define-property": "^1.0.0",
+                "get-intrinsic": "^1.2.4",
+                "set-function-length": "^1.2.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -1387,5 +3276,4 @@
             "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
             "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1397,19 +3285,34 @@
             }
         },
-        "node_modules/camelcase-css": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
-            "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 6"
+        "node_modules/call-bound": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+            "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+            "license": "MIT",
+            "dependencies": {
+                "call-bind-apply-helpers": "^1.0.2",
+                "get-intrinsic": "^1.3.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/callsites": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001757",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
-            "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
-            "dev": true,
+            "version": "1.0.30001702",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz",
+            "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==",
             "funding": [
                 {
@@ -1432,5 +3335,4 @@
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
             "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1449,5 +3351,4 @@
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
             "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1458,40 +3359,14 @@
             }
         },
-        "node_modules/chokidar": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
-            },
-            "engines": {
-                "node": ">= 8.10.0"
-            },
-            "funding": {
-                "url": "https://paulmillr.com/funding/"
-            },
-            "optionalDependencies": {
-                "fsevents": "~2.3.2"
-            }
-        },
-        "node_modules/chokidar/node_modules/glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "is-glob": "^4.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
+        "node_modules/class-variance-authority": {
+            "version": "0.7.1",
+            "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+            "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "clsx": "^2.1.1"
+            },
+            "funding": {
+                "url": "https://polar.sh/cva"
             }
         },
@@ -1500,5 +3375,4 @@
             "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
             "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-            "dev": true,
             "license": "ISC",
             "dependencies": {
@@ -1509,4 +3383,13 @@
             "engines": {
                 "node": ">=12"
+            }
+        },
+        "node_modules/clsx": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+            "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
             }
         },
@@ -1515,5 +3398,4 @@
             "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
             "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1528,5 +3410,4 @@
             "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
             "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true,
             "license": "MIT"
         },
@@ -1535,5 +3416,4 @@
             "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
             "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1544,27 +3424,24 @@
             }
         },
-        "node_modules/commander": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-            "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 6"
-            }
+        "node_modules/concat-map": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/concurrently": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
-            "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "chalk": "4.1.2",
-                "rxjs": "7.8.2",
-                "shell-quote": "1.8.3",
-                "supports-color": "8.1.1",
-                "tree-kill": "1.2.2",
-                "yargs": "17.7.2"
+            "version": "9.1.2",
+            "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz",
+            "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==",
+            "license": "MIT",
+            "dependencies": {
+                "chalk": "^4.1.2",
+                "lodash": "^4.17.21",
+                "rxjs": "^7.8.1",
+                "shell-quote": "^1.8.1",
+                "supports-color": "^8.1.1",
+                "tree-kill": "^1.2.2",
+                "yargs": "^17.7.2"
             },
             "bin": {
@@ -1579,15 +3456,152 @@
             }
         },
-        "node_modules/cssesc": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-            "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-            "dev": true,
-            "license": "MIT",
-            "bin": {
-                "cssesc": "bin/cssesc"
-            },
-            "engines": {
-                "node": ">=4"
+        "node_modules/convert-source-map": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+            "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+            "license": "MIT"
+        },
+        "node_modules/cross-spawn": {
+            "version": "7.0.6",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+            "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/csstype": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+            "license": "MIT"
+        },
+        "node_modules/data-view-buffer": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+            "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/data-view-byte-length": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+            "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/inspect-js"
+            }
+        },
+        "node_modules/data-view-byte-offset": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+            "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "es-errors": "^1.3.0",
+                "is-data-view": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/debug": {
+            "version": "4.4.0",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+            "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+            "license": "MIT",
+            "dependencies": {
+                "ms": "^2.1.3"
+            },
+            "engines": {
+                "node": ">=6.0"
+            },
+            "peerDependenciesMeta": {
+                "supports-color": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/deep-is": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+            "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/deepmerge": {
+            "version": "4.3.1",
+            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+            "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/define-data-property": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+            "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "es-define-property": "^1.0.0",
+                "es-errors": "^1.3.0",
+                "gopd": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/define-properties": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-data-property": "^1.0.1",
+                "has-property-descriptors": "^1.0.0",
+                "object-keys": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -1596,5 +3610,4 @@
             "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
             "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -1603,26 +3616,33 @@
         },
         "node_modules/detect-libc": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
-            "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
-            "dev": true,
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+            "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
             "license": "Apache-2.0",
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/didyoumean": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
-            "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
-            "dev": true,
-            "license": "Apache-2.0"
-        },
-        "node_modules/dlv": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
-            "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
-            "dev": true,
+            "bin": {
+                "detect-libc": "bin/detect-libc.js"
+            },
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/detect-node-es": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+            "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
             "license": "MIT"
+        },
+        "node_modules/doctrine": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+            "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "esutils": "^2.0.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
         },
         "node_modules/dunder-proto": {
@@ -1630,5 +3650,4 @@
             "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
             "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1642,8 +3661,7 @@
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.5.262",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz",
-            "integrity": "sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==",
-            "dev": true,
+            "version": "1.5.112",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz",
+            "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==",
             "license": "ISC"
         },
@@ -1652,12 +3670,10 @@
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
             "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true,
             "license": "MIT"
         },
         "node_modules/enhanced-resolve": {
-            "version": "5.18.3",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
-            "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
-            "dev": true,
+            "version": "5.18.1",
+            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+            "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
             "license": "MIT",
             "dependencies": {
@@ -1667,4 +3683,70 @@
             "engines": {
                 "node": ">=10.13.0"
+            }
+        },
+        "node_modules/es-abstract": {
+            "version": "1.23.9",
+            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+            "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "array-buffer-byte-length": "^1.0.2",
+                "arraybuffer.prototype.slice": "^1.0.4",
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "data-view-buffer": "^1.0.2",
+                "data-view-byte-length": "^1.0.2",
+                "data-view-byte-offset": "^1.0.1",
+                "es-define-property": "^1.0.1",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "es-set-tostringtag": "^2.1.0",
+                "es-to-primitive": "^1.3.0",
+                "function.prototype.name": "^1.1.8",
+                "get-intrinsic": "^1.2.7",
+                "get-proto": "^1.0.0",
+                "get-symbol-description": "^1.1.0",
+                "globalthis": "^1.0.4",
+                "gopd": "^1.2.0",
+                "has-property-descriptors": "^1.0.2",
+                "has-proto": "^1.2.0",
+                "has-symbols": "^1.1.0",
+                "hasown": "^2.0.2",
+                "internal-slot": "^1.1.0",
+                "is-array-buffer": "^3.0.5",
+                "is-callable": "^1.2.7",
+                "is-data-view": "^1.0.2",
+                "is-regex": "^1.2.1",
+                "is-shared-array-buffer": "^1.0.4",
+                "is-string": "^1.1.1",
+                "is-typed-array": "^1.1.15",
+                "is-weakref": "^1.1.0",
+                "math-intrinsics": "^1.1.0",
+                "object-inspect": "^1.13.3",
+                "object-keys": "^1.1.1",
+                "object.assign": "^4.1.7",
+                "own-keys": "^1.0.1",
+                "regexp.prototype.flags": "^1.5.3",
+                "safe-array-concat": "^1.1.3",
+                "safe-push-apply": "^1.0.0",
+                "safe-regex-test": "^1.1.0",
+                "set-proto": "^1.0.0",
+                "string.prototype.trim": "^1.2.10",
+                "string.prototype.trimend": "^1.0.9",
+                "string.prototype.trimstart": "^1.0.8",
+                "typed-array-buffer": "^1.0.3",
+                "typed-array-byte-length": "^1.0.3",
+                "typed-array-byte-offset": "^1.0.4",
+                "typed-array-length": "^1.0.7",
+                "unbox-primitive": "^1.1.0",
+                "which-typed-array": "^1.1.18"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -1673,5 +3755,4 @@
             "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
             "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -1683,6 +3764,33 @@
             "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
             "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-            "dev": true,
-            "license": "MIT",
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-iterator-helpers": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+            "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.6",
+                "es-errors": "^1.3.0",
+                "es-set-tostringtag": "^2.0.3",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.6",
+                "globalthis": "^1.0.4",
+                "gopd": "^1.2.0",
+                "has-property-descriptors": "^1.0.2",
+                "has-proto": "^1.2.0",
+                "has-symbols": "^1.1.0",
+                "internal-slot": "^1.1.0",
+                "iterator.prototype": "^1.1.4",
+                "safe-array-concat": "^1.1.3"
+            },
             "engines": {
                 "node": ">= 0.4"
@@ -1693,5 +3801,4 @@
             "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
             "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1706,5 +3813,4 @@
             "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
             "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1718,9 +3824,39 @@
             }
         },
+        "node_modules/es-shim-unscopables": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+            "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "hasown": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/es-to-primitive": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+            "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "is-callable": "^1.2.7",
+                "is-date-object": "^1.0.5",
+                "is-symbol": "^1.0.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/esbuild": {
-            "version": "0.25.12",
-            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
-            "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
-            "dev": true,
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
+            "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
             "hasInstallScript": true,
             "license": "MIT",
@@ -1732,30 +3868,29 @@
             },
             "optionalDependencies": {
-                "@esbuild/aix-ppc64": "0.25.12",
-                "@esbuild/android-arm": "0.25.12",
-                "@esbuild/android-arm64": "0.25.12",
-                "@esbuild/android-x64": "0.25.12",
-                "@esbuild/darwin-arm64": "0.25.12",
-                "@esbuild/darwin-x64": "0.25.12",
-                "@esbuild/freebsd-arm64": "0.25.12",
-                "@esbuild/freebsd-x64": "0.25.12",
-                "@esbuild/linux-arm": "0.25.12",
-                "@esbuild/linux-arm64": "0.25.12",
-                "@esbuild/linux-ia32": "0.25.12",
-                "@esbuild/linux-loong64": "0.25.12",
-                "@esbuild/linux-mips64el": "0.25.12",
-                "@esbuild/linux-ppc64": "0.25.12",
-                "@esbuild/linux-riscv64": "0.25.12",
-                "@esbuild/linux-s390x": "0.25.12",
-                "@esbuild/linux-x64": "0.25.12",
-                "@esbuild/netbsd-arm64": "0.25.12",
-                "@esbuild/netbsd-x64": "0.25.12",
-                "@esbuild/openbsd-arm64": "0.25.12",
-                "@esbuild/openbsd-x64": "0.25.12",
-                "@esbuild/openharmony-arm64": "0.25.12",
-                "@esbuild/sunos-x64": "0.25.12",
-                "@esbuild/win32-arm64": "0.25.12",
-                "@esbuild/win32-ia32": "0.25.12",
-                "@esbuild/win32-x64": "0.25.12"
+                "@esbuild/aix-ppc64": "0.25.0",
+                "@esbuild/android-arm": "0.25.0",
+                "@esbuild/android-arm64": "0.25.0",
+                "@esbuild/android-x64": "0.25.0",
+                "@esbuild/darwin-arm64": "0.25.0",
+                "@esbuild/darwin-x64": "0.25.0",
+                "@esbuild/freebsd-arm64": "0.25.0",
+                "@esbuild/freebsd-x64": "0.25.0",
+                "@esbuild/linux-arm": "0.25.0",
+                "@esbuild/linux-arm64": "0.25.0",
+                "@esbuild/linux-ia32": "0.25.0",
+                "@esbuild/linux-loong64": "0.25.0",
+                "@esbuild/linux-mips64el": "0.25.0",
+                "@esbuild/linux-ppc64": "0.25.0",
+                "@esbuild/linux-riscv64": "0.25.0",
+                "@esbuild/linux-s390x": "0.25.0",
+                "@esbuild/linux-x64": "0.25.0",
+                "@esbuild/netbsd-arm64": "0.25.0",
+                "@esbuild/netbsd-x64": "0.25.0",
+                "@esbuild/openbsd-arm64": "0.25.0",
+                "@esbuild/openbsd-x64": "0.25.0",
+                "@esbuild/sunos-x64": "0.25.0",
+                "@esbuild/win32-arm64": "0.25.0",
+                "@esbuild/win32-ia32": "0.25.0",
+                "@esbuild/win32-x64": "0.25.0"
             }
         },
@@ -1764,9 +3899,241 @@
             "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
             "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-            "dev": true,
             "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
+        },
+        "node_modules/escape-string-regexp": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+            "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/eslint": {
+            "version": "9.21.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz",
+            "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@eslint-community/eslint-utils": "^4.2.0",
+                "@eslint-community/regexpp": "^4.12.1",
+                "@eslint/config-array": "^0.19.2",
+                "@eslint/core": "^0.12.0",
+                "@eslint/eslintrc": "^3.3.0",
+                "@eslint/js": "9.21.0",
+                "@eslint/plugin-kit": "^0.2.7",
+                "@humanfs/node": "^0.16.6",
+                "@humanwhocodes/module-importer": "^1.0.1",
+                "@humanwhocodes/retry": "^0.4.2",
+                "@types/estree": "^1.0.6",
+                "@types/json-schema": "^7.0.15",
+                "ajv": "^6.12.4",
+                "chalk": "^4.0.0",
+                "cross-spawn": "^7.0.6",
+                "debug": "^4.3.2",
+                "escape-string-regexp": "^4.0.0",
+                "eslint-scope": "^8.2.0",
+                "eslint-visitor-keys": "^4.2.0",
+                "espree": "^10.3.0",
+                "esquery": "^1.5.0",
+                "esutils": "^2.0.2",
+                "fast-deep-equal": "^3.1.3",
+                "file-entry-cache": "^8.0.0",
+                "find-up": "^5.0.0",
+                "glob-parent": "^6.0.2",
+                "ignore": "^5.2.0",
+                "imurmurhash": "^0.1.4",
+                "is-glob": "^4.0.0",
+                "json-stable-stringify-without-jsonify": "^1.0.1",
+                "lodash.merge": "^4.6.2",
+                "minimatch": "^3.1.2",
+                "natural-compare": "^1.4.0",
+                "optionator": "^0.9.3"
+            },
+            "bin": {
+                "eslint": "bin/eslint.js"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://eslint.org/donate"
+            },
+            "peerDependencies": {
+                "jiti": "*"
+            },
+            "peerDependenciesMeta": {
+                "jiti": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/eslint-config-prettier": {
+            "version": "10.0.2",
+            "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.2.tgz",
+            "integrity": "sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==",
+            "dev": true,
+            "license": "MIT",
+            "bin": {
+                "eslint-config-prettier": "build/bin/cli.js"
+            },
+            "peerDependencies": {
+                "eslint": ">=7.0.0"
+            }
+        },
+        "node_modules/eslint-plugin-react": {
+            "version": "7.37.4",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz",
+            "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "array-includes": "^3.1.8",
+                "array.prototype.findlast": "^1.2.5",
+                "array.prototype.flatmap": "^1.3.3",
+                "array.prototype.tosorted": "^1.1.4",
+                "doctrine": "^2.1.0",
+                "es-iterator-helpers": "^1.2.1",
+                "estraverse": "^5.3.0",
+                "hasown": "^2.0.2",
+                "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+                "minimatch": "^3.1.2",
+                "object.entries": "^1.1.8",
+                "object.fromentries": "^2.0.8",
+                "object.values": "^1.2.1",
+                "prop-types": "^15.8.1",
+                "resolve": "^2.0.0-next.5",
+                "semver": "^6.3.1",
+                "string.prototype.matchall": "^4.0.12",
+                "string.prototype.repeat": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=4"
+            },
+            "peerDependencies": {
+                "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+            }
+        },
+        "node_modules/eslint-plugin-react-hooks": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+            "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+            }
+        },
+        "node_modules/eslint-scope": {
+            "version": "8.2.0",
+            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+            "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "esrecurse": "^4.3.0",
+                "estraverse": "^5.2.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/eslint-visitor-keys": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+            "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/espree": {
+            "version": "10.3.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+            "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "acorn": "^8.14.0",
+                "acorn-jsx": "^5.3.2",
+                "eslint-visitor-keys": "^4.2.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/esquery": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+            "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+            "dev": true,
+            "license": "BSD-3-Clause",
+            "dependencies": {
+                "estraverse": "^5.1.0"
+            },
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/esrecurse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "estraverse": "^5.2.0"
+            },
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/estraverse": {
+            "version": "5.3.0",
+            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+            "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/esutils": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/fast-deep-equal": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/fast-glob": {
@@ -1800,4 +4167,18 @@
             }
         },
+        "node_modules/fast-json-stable-stringify": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/fast-levenshtein": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+            "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/fastq": {
             "version": "1.19.1",
@@ -1810,4 +4191,17 @@
             }
         },
+        "node_modules/file-entry-cache": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+            "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "flat-cache": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=16.0.0"
+            }
+        },
         "node_modules/fill-range": {
             "version": "7.1.1",
@@ -1823,9 +4217,46 @@
             }
         },
+        "node_modules/find-up": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+            "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "locate-path": "^6.0.0",
+                "path-exists": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/flat-cache": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+            "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "flatted": "^3.2.9",
+                "keyv": "^4.5.4"
+            },
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/flatted": {
+            "version": "3.3.3",
+            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+            "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+            "dev": true,
+            "license": "ISC"
+        },
         "node_modules/follow-redirects": {
-            "version": "1.15.11",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
-            "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
-            "dev": true,
+            "version": "1.15.9",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+            "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
             "funding": [
                 {
@@ -1844,9 +4275,24 @@
             }
         },
+        "node_modules/for-each": {
+            "version": "0.3.5",
+            "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+            "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "is-callable": "^1.2.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/form-data": {
-            "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
-            "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
-            "dev": true,
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+            "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
             "license": "MIT",
             "dependencies": {
@@ -1854,23 +4300,8 @@
                 "combined-stream": "^1.0.8",
                 "es-set-tostringtag": "^2.1.0",
-                "hasown": "^2.0.2",
                 "mime-types": "^2.1.12"
             },
             "engines": {
                 "node": ">= 6"
-            }
-        },
-        "node_modules/fraction.js": {
-            "version": "5.3.4",
-            "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
-            "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": "*"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/rawify"
             }
         },
@@ -1879,5 +4310,4 @@
             "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
             "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-            "dev": true,
             "hasInstallScript": true,
             "license": "MIT",
@@ -1894,8 +4324,47 @@
             "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
             "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-            "dev": true,
-            "license": "MIT",
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
+            "license": "MIT",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/function.prototype.name": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+            "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "define-properties": "^1.2.1",
+                "functions-have-names": "^1.2.3",
+                "hasown": "^2.0.2",
+                "is-callable": "^1.2.7"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/functions-have-names": {
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+            "dev": true,
+            "license": "MIT",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/gensync": {
+            "version": "1.0.0-beta.2",
+            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+            "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
@@ -1904,5 +4373,4 @@
             "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-            "dev": true,
             "license": "ISC",
             "engines": {
@@ -1914,5 +4382,4 @@
             "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
             "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1935,9 +4402,17 @@
             }
         },
+        "node_modules/get-nonce": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+            "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
         "node_modules/get-proto": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
             "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -1947,4 +4422,22 @@
             "engines": {
                 "node": ">= 0.4"
+            }
+        },
+        "node_modules/get-symbol-description": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+            "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.6"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -1962,9 +4455,37 @@
             }
         },
+        "node_modules/globals": {
+            "version": "15.15.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+            "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/globalthis": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+            "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-properties": "^1.2.1",
+                "gopd": "^1.0.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/gopd": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
             "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -1979,6 +4500,25 @@
             "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
             "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-            "dev": true,
             "license": "ISC"
+        },
+        "node_modules/graphemer": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+            "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/has-bigints": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+            "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
         "node_modules/has-flag": {
@@ -1986,8 +4526,36 @@
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
             "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-            "dev": true,
             "license": "MIT",
             "engines": {
                 "node": ">=8"
+            }
+        },
+        "node_modules/has-property-descriptors": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+            "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "es-define-property": "^1.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/has-proto": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+            "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "dunder-proto": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -1996,5 +4564,4 @@
             "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
             "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -2009,5 +4576,4 @@
             "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
             "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -2025,5 +4591,4 @@
             "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
             "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -2034,15 +4599,138 @@
             }
         },
-        "node_modules/is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "binary-extensions": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=8"
+        "node_modules/ignore": {
+            "version": "5.3.2",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+            "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 4"
+            }
+        },
+        "node_modules/import-fresh": {
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+            "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "parent-module": "^1.0.0",
+                "resolve-from": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/imurmurhash": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+            "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.8.19"
+            }
+        },
+        "node_modules/internal-slot": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+            "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "hasown": "^2.0.2",
+                "side-channel": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/is-array-buffer": {
+            "version": "3.0.5",
+            "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+            "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "get-intrinsic": "^1.2.6"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-async-function": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+            "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "async-function": "^1.0.0",
+                "call-bound": "^1.0.3",
+                "get-proto": "^1.0.1",
+                "has-tostringtag": "^1.0.2",
+                "safe-regex-test": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-bigint": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+            "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "has-bigints": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-boolean-object": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+            "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-callable": {
+            "version": "1.2.7",
+            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+            "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -2063,4 +4751,39 @@
             }
         },
+        "node_modules/is-data-view": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+            "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "get-intrinsic": "^1.2.6",
+                "is-typed-array": "^1.1.13"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-date-object": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+            "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/is-extglob": {
             "version": "2.1.1",
@@ -2073,12 +4796,46 @@
             }
         },
+        "node_modules/is-finalizationregistry": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+            "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/is-fullwidth-code-point": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
             "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-            "dev": true,
             "license": "MIT",
             "engines": {
                 "node": ">=8"
+            }
+        },
+        "node_modules/is-generator-function": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+            "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "get-proto": "^1.0.0",
+                "has-tostringtag": "^1.0.2",
+                "safe-regex-test": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -2096,4 +4853,17 @@
             }
         },
+        "node_modules/is-map": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+            "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/is-number": {
             "version": "7.0.0",
@@ -2106,9 +4876,202 @@
             }
         },
+        "node_modules/is-number-object": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+            "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-regex": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+            "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "gopd": "^1.2.0",
+                "has-tostringtag": "^1.0.2",
+                "hasown": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-set": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+            "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-shared-array-buffer": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+            "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-string": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+            "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-symbol": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+            "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "has-symbols": "^1.1.0",
+                "safe-regex-test": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-typed-array": {
+            "version": "1.1.15",
+            "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+            "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "which-typed-array": "^1.1.16"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-weakmap": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+            "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-weakref": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+            "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/is-weakset": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+            "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "get-intrinsic": "^1.2.6"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/isarray": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/isexe": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+            "dev": true,
+            "license": "ISC"
+        },
+        "node_modules/iterator.prototype": {
+            "version": "1.1.5",
+            "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+            "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-data-property": "^1.1.4",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.6",
+                "get-proto": "^1.0.0",
+                "has-symbols": "^1.1.0",
+                "set-function-name": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/jiti": {
-            "version": "2.6.1",
-            "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
-            "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
-            "dev": true,
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
+            "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
             "license": "MIT",
             "bin": {
@@ -2116,9 +5079,98 @@
             }
         },
+        "node_modules/js-tokens": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+            "license": "MIT"
+        },
+        "node_modules/js-yaml": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "argparse": "^2.0.1"
+            },
+            "bin": {
+                "js-yaml": "bin/js-yaml.js"
+            }
+        },
+        "node_modules/jsesc": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+            "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+            "license": "MIT",
+            "bin": {
+                "jsesc": "bin/jsesc"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/json-buffer": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+            "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/json-schema-traverse": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/json-stable-stringify-without-jsonify": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+            "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/json5": {
+            "version": "2.2.3",
+            "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+            "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+            "license": "MIT",
+            "bin": {
+                "json5": "lib/cli.js"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/jsx-ast-utils": {
+            "version": "3.3.5",
+            "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+            "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "array-includes": "^3.1.6",
+                "array.prototype.flat": "^1.3.1",
+                "object.assign": "^4.1.4",
+                "object.values": "^1.1.6"
+            },
+            "engines": {
+                "node": ">=4.0"
+            }
+        },
+        "node_modules/keyv": {
+            "version": "4.5.4",
+            "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+            "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "json-buffer": "3.0.1"
+            }
+        },
         "node_modules/laravel-vite-plugin": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.0.1.tgz",
-            "integrity": "sha512-zQuvzWfUKQu9oNVi1o0RZAJCwhGsdhx4NEOyrVQwJHaWDseGP9tl7XUPLY2T8Cj6+IrZ6lmyxlR1KC8unf3RLA==",
-            "dev": true,
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz",
+            "integrity": "sha512-R0pJ+IcTVeqEMoKz/B2Ij57QVq3sFTABiFmb06gAwFdivbOgsUtuhX6N2MGLEArajrS3U5JbberzwOe7uXHMHQ==",
             "license": "MIT",
             "dependencies": {
@@ -2130,18 +5182,31 @@
             },
             "engines": {
-                "node": "^20.19.0 || >=22.12.0"
-            },
-            "peerDependencies": {
-                "vite": "^7.0.0"
+                "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+            },
+            "peerDependencies": {
+                "vite": "^5.0.0 || ^6.0.0"
+            }
+        },
+        "node_modules/levn": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+            "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "prelude-ls": "^1.2.1",
+                "type-check": "~0.4.0"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
             }
         },
         "node_modules/lightningcss": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
-            "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
-            "dev": true,
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz",
+            "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==",
             "license": "MPL-2.0",
             "dependencies": {
-                "detect-libc": "^2.0.3"
+                "detect-libc": "^1.0.3"
             },
             "engines": {
@@ -2153,46 +5218,23 @@
             },
             "optionalDependencies": {
-                "lightningcss-android-arm64": "1.30.2",
-                "lightningcss-darwin-arm64": "1.30.2",
-                "lightningcss-darwin-x64": "1.30.2",
-                "lightningcss-freebsd-x64": "1.30.2",
-                "lightningcss-linux-arm-gnueabihf": "1.30.2",
-                "lightningcss-linux-arm64-gnu": "1.30.2",
-                "lightningcss-linux-arm64-musl": "1.30.2",
-                "lightningcss-linux-x64-gnu": "1.30.2",
-                "lightningcss-linux-x64-musl": "1.30.2",
-                "lightningcss-win32-arm64-msvc": "1.30.2",
-                "lightningcss-win32-x64-msvc": "1.30.2"
-            }
-        },
-        "node_modules/lightningcss-android-arm64": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz",
-            "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
+                "lightningcss-darwin-arm64": "1.29.1",
+                "lightningcss-darwin-x64": "1.29.1",
+                "lightningcss-freebsd-x64": "1.29.1",
+                "lightningcss-linux-arm-gnueabihf": "1.29.1",
+                "lightningcss-linux-arm64-gnu": "1.29.1",
+                "lightningcss-linux-arm64-musl": "1.29.1",
+                "lightningcss-linux-x64-gnu": "1.29.1",
+                "lightningcss-linux-x64-musl": "1.29.1",
+                "lightningcss-win32-arm64-msvc": "1.29.1",
+                "lightningcss-win32-x64-msvc": "1.29.1"
+            }
+        },
+        "node_modules/lightningcss-darwin-arm64": {
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz",
+            "integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
-            "license": "MPL-2.0",
-            "optional": true,
-            "os": [
-                "android"
-            ],
-            "engines": {
-                "node": ">= 12.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/parcel"
-            }
-        },
-        "node_modules/lightningcss-darwin-arm64": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz",
-            "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
-            "cpu": [
-                "arm64"
-            ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2209,11 +5251,10 @@
         },
         "node_modules/lightningcss-darwin-x64": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz",
-            "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz",
+            "integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2230,11 +5271,10 @@
         },
         "node_modules/lightningcss-freebsd-x64": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz",
-            "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz",
+            "integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2251,11 +5291,10 @@
         },
         "node_modules/lightningcss-linux-arm-gnueabihf": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz",
-            "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz",
+            "integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==",
             "cpu": [
                 "arm"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2272,11 +5311,10 @@
         },
         "node_modules/lightningcss-linux-arm64-gnu": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz",
-            "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz",
+            "integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2293,11 +5331,10 @@
         },
         "node_modules/lightningcss-linux-arm64-musl": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz",
-            "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz",
+            "integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2314,11 +5351,10 @@
         },
         "node_modules/lightningcss-linux-x64-gnu": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz",
-            "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz",
+            "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2335,11 +5371,10 @@
         },
         "node_modules/lightningcss-linux-x64-musl": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz",
-            "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz",
+            "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2356,11 +5391,10 @@
         },
         "node_modules/lightningcss-win32-arm64-msvc": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz",
-            "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz",
+            "integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==",
             "cpu": [
                 "arm64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2377,11 +5411,10 @@
         },
         "node_modules/lightningcss-win32-x64-msvc": {
-            "version": "1.30.2",
-            "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz",
-            "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
+            "version": "1.29.1",
+            "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz",
+            "integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==",
             "cpu": [
                 "x64"
             ],
-            "dev": true,
             "license": "MPL-2.0",
             "optional": true,
@@ -2397,32 +5430,69 @@
             }
         },
-        "node_modules/lilconfig": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
-            "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=14"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/antonk52"
-            }
-        },
-        "node_modules/lines-and-columns": {
-            "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-            "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-            "dev": true,
+        "node_modules/locate-path": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+            "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "p-locate": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/lodash": {
+            "version": "4.17.21",
+            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+            "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
             "license": "MIT"
         },
-        "node_modules/magic-string": {
-            "version": "0.30.21",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@jridgewell/sourcemap-codec": "^1.5.5"
+        "node_modules/lodash.isequal": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+            "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+            "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+            "license": "MIT"
+        },
+        "node_modules/lodash.merge": {
+            "version": "4.6.2",
+            "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+            "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/loose-envify": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+            "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "js-tokens": "^3.0.0 || ^4.0.0"
+            },
+            "bin": {
+                "loose-envify": "cli.js"
+            }
+        },
+        "node_modules/lru-cache": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+            "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^3.0.2"
+            }
+        },
+        "node_modules/lucide-react": {
+            "version": "0.475.0",
+            "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz",
+            "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==",
+            "license": "ISC",
+            "peerDependencies": {
+                "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
             }
         },
@@ -2431,5 +5501,4 @@
             "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
             "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -2465,5 +5534,4 @@
             "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
             "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -2475,5 +5543,4 @@
             "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
             "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -2484,31 +5551,27 @@
             }
         },
-        "node_modules/mini-svg-data-uri": {
-            "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
-            "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
-            "dev": true,
-            "license": "MIT",
-            "bin": {
-                "mini-svg-data-uri": "cli.js"
-            }
-        },
-        "node_modules/mz": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-            "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "any-promise": "^1.0.0",
-                "object-assign": "^4.0.1",
-                "thenify-all": "^1.0.0"
-            }
+        "node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
+        "node_modules/ms": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+            "license": "MIT"
         },
         "node_modules/nanoid": {
-            "version": "3.3.11",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-            "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-            "dev": true,
+            "version": "3.3.8",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+            "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
             "funding": [
                 {
@@ -2525,30 +5588,16 @@
             }
         },
+        "node_modules/natural-compare": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+            "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/node-releases": {
-            "version": "2.0.27",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
-            "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
-            "dev": true,
+            "version": "2.0.19",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+            "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
             "license": "MIT"
-        },
-        "node_modules/normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/normalize-range": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-            "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.10.0"
-            }
         },
         "node_modules/object-assign": {
@@ -2562,12 +5611,199 @@
             }
         },
-        "node_modules/object-hash": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
-            "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 6"
+        "node_modules/object-inspect": {
+            "version": "1.13.4",
+            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+            "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/object-keys": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/object.assign": {
+            "version": "4.1.7",
+            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+            "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0",
+                "has-symbols": "^1.1.0",
+                "object-keys": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/object.entries": {
+            "version": "1.1.8",
+            "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+            "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/object.fromentries": {
+            "version": "2.0.8",
+            "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+            "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.2",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/object.values": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+            "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/optionator": {
+            "version": "0.9.4",
+            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+            "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "deep-is": "^0.1.3",
+                "fast-levenshtein": "^2.0.6",
+                "levn": "^0.4.1",
+                "prelude-ls": "^1.2.1",
+                "type-check": "^0.4.0",
+                "word-wrap": "^1.2.5"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/own-keys": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+            "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "get-intrinsic": "^1.2.6",
+                "object-keys": "^1.1.1",
+                "safe-push-apply": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/p-limit": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+            "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "yocto-queue": "^0.1.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/p-locate": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+            "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "p-limit": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/parent-module": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "callsites": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/path-exists": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/path-key": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
             }
         },
@@ -2583,5 +5819,4 @@
             "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
             "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-            "dev": true,
             "license": "ISC"
         },
@@ -2590,5 +5825,4 @@
             "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
             "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -2599,29 +5833,18 @@
             }
         },
-        "node_modules/pify": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-            "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/pirates": {
-            "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
-            "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 6"
+        "node_modules/possible-typed-array-names": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+            "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
             }
         },
         "node_modules/postcss": {
-            "version": "8.5.6",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
-            "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
-            "dev": true,
+            "version": "8.5.3",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+            "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
             "funding": [
                 {
@@ -2640,5 +5863,5 @@
             "license": "MIT",
             "dependencies": {
-                "nanoid": "^3.3.11",
+                "nanoid": "^3.3.8",
                 "picocolors": "^1.1.1",
                 "source-map-js": "^1.2.1"
@@ -2648,137 +5871,137 @@
             }
         },
-        "node_modules/postcss-import": {
-            "version": "15.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
-            "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "postcss-value-parser": "^4.0.0",
-                "read-cache": "^1.0.0",
-                "resolve": "^1.1.7"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.0.0"
-            }
-        },
-        "node_modules/postcss-js": {
+        "node_modules/prelude-ls": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+            "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/prettier": {
+            "version": "3.5.3",
+            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+            "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+            "dev": true,
+            "license": "MIT",
+            "bin": {
+                "prettier": "bin/prettier.cjs"
+            },
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/prettier/prettier?sponsor=1"
+            }
+        },
+        "node_modules/prettier-plugin-organize-imports": {
             "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
-            "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
+            "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
+            "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
+            "dev": true,
+            "license": "MIT",
+            "peerDependencies": {
+                "prettier": ">=2.0",
+                "typescript": ">=2.9",
+                "vue-tsc": "^2.1.0"
+            },
+            "peerDependenciesMeta": {
+                "vue-tsc": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/prettier-plugin-tailwindcss": {
+            "version": "0.6.11",
+            "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz",
+            "integrity": "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=14.21.3"
+            },
+            "peerDependencies": {
+                "@ianvs/prettier-plugin-sort-imports": "*",
+                "@prettier/plugin-pug": "*",
+                "@shopify/prettier-plugin-liquid": "*",
+                "@trivago/prettier-plugin-sort-imports": "*",
+                "@zackad/prettier-plugin-twig": "*",
+                "prettier": "^3.0",
+                "prettier-plugin-astro": "*",
+                "prettier-plugin-css-order": "*",
+                "prettier-plugin-import-sort": "*",
+                "prettier-plugin-jsdoc": "*",
+                "prettier-plugin-marko": "*",
+                "prettier-plugin-multiline-arrays": "*",
+                "prettier-plugin-organize-attributes": "*",
+                "prettier-plugin-organize-imports": "*",
+                "prettier-plugin-sort-imports": "*",
+                "prettier-plugin-style-order": "*",
+                "prettier-plugin-svelte": "*"
+            },
+            "peerDependenciesMeta": {
+                "@ianvs/prettier-plugin-sort-imports": {
+                    "optional": true
                 },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
+                "@prettier/plugin-pug": {
+                    "optional": true
+                },
+                "@shopify/prettier-plugin-liquid": {
+                    "optional": true
+                },
+                "@trivago/prettier-plugin-sort-imports": {
+                    "optional": true
+                },
+                "@zackad/prettier-plugin-twig": {
+                    "optional": true
+                },
+                "prettier-plugin-astro": {
+                    "optional": true
+                },
+                "prettier-plugin-css-order": {
+                    "optional": true
+                },
+                "prettier-plugin-import-sort": {
+                    "optional": true
+                },
+                "prettier-plugin-jsdoc": {
+                    "optional": true
+                },
+                "prettier-plugin-marko": {
+                    "optional": true
+                },
+                "prettier-plugin-multiline-arrays": {
+                    "optional": true
+                },
+                "prettier-plugin-organize-attributes": {
+                    "optional": true
+                },
+                "prettier-plugin-organize-imports": {
+                    "optional": true
+                },
+                "prettier-plugin-sort-imports": {
+                    "optional": true
+                },
+                "prettier-plugin-style-order": {
+                    "optional": true
+                },
+                "prettier-plugin-svelte": {
+                    "optional": true
                 }
-            ],
-            "license": "MIT",
-            "dependencies": {
-                "camelcase-css": "^2.0.1"
-            },
-            "engines": {
-                "node": "^12 || ^14 || >= 16"
-            },
-            "peerDependencies": {
-                "postcss": "^8.4.21"
-            }
-        },
-        "node_modules/postcss-load-config": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
-            "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "license": "MIT",
-            "dependencies": {
-                "lilconfig": "^3.1.1"
-            },
-            "engines": {
-                "node": ">= 18"
-            },
-            "peerDependencies": {
-                "jiti": ">=1.21.0",
-                "postcss": ">=8.0.9",
-                "tsx": "^4.8.1",
-                "yaml": "^2.4.2"
-            },
-            "peerDependenciesMeta": {
-                "jiti": {
-                    "optional": true
-                },
-                "postcss": {
-                    "optional": true
-                },
-                "tsx": {
-                    "optional": true
-                },
-                "yaml": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/postcss-nested": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
-            "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "license": "MIT",
-            "dependencies": {
-                "postcss-selector-parser": "^6.1.1"
-            },
-            "engines": {
-                "node": ">=12.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.2.14"
-            }
-        },
-        "node_modules/postcss-selector-parser": {
-            "version": "6.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-            "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "cssesc": "^3.0.0",
-                "util-deprecate": "^1.0.2"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/postcss-value-parser": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-            "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-            "dev": true,
-            "license": "MIT"
+            }
+        },
+        "node_modules/prop-types": {
+            "version": "15.8.1",
+            "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+            "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "loose-envify": "^1.4.0",
+                "object-assign": "^4.1.1",
+                "react-is": "^16.13.1"
+            }
         },
         "node_modules/proxy-from-env": {
@@ -2786,6 +6009,30 @@
             "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
             "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
-            "dev": true,
             "license": "MIT"
+        },
+        "node_modules/punycode": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+            "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/qs": {
+            "version": "6.14.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+            "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+            "license": "BSD-3-Clause",
+            "dependencies": {
+                "side-channel": "^1.1.0"
+            },
+            "engines": {
+                "node": ">=0.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
         "node_modules/queue-microtask": {
@@ -2810,25 +6057,152 @@
             "license": "MIT"
         },
-        "node_modules/read-cache": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-            "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "pify": "^2.3.0"
-            }
-        },
-        "node_modules/readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "picomatch": "^2.2.1"
-            },
-            "engines": {
-                "node": ">=8.10.0"
+        "node_modules/react": {
+            "version": "19.0.0",
+            "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
+            "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/react-dom": {
+            "version": "19.0.0",
+            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
+            "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
+            "license": "MIT",
+            "dependencies": {
+                "scheduler": "^0.25.0"
+            },
+            "peerDependencies": {
+                "react": "^19.0.0"
+            }
+        },
+        "node_modules/react-is": {
+            "version": "16.13.1",
+            "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+            "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/react-refresh": {
+            "version": "0.14.2",
+            "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+            "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/react-remove-scroll": {
+            "version": "2.6.3",
+            "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
+            "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
+            "license": "MIT",
+            "dependencies": {
+                "react-remove-scroll-bar": "^2.3.7",
+                "react-style-singleton": "^2.2.3",
+                "tslib": "^2.1.0",
+                "use-callback-ref": "^1.3.3",
+                "use-sidecar": "^1.1.3"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/react-remove-scroll-bar": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+            "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+            "license": "MIT",
+            "dependencies": {
+                "react-style-singleton": "^2.2.2",
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/react-style-singleton": {
+            "version": "2.2.3",
+            "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+            "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+            "license": "MIT",
+            "dependencies": {
+                "get-nonce": "^1.0.0",
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/reflect.getprototypeof": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+            "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.9",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.7",
+                "get-proto": "^1.0.1",
+                "which-builtin-type": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/regexp.prototype.flags": {
+            "version": "1.5.4",
+            "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+            "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "define-properties": "^1.2.1",
+                "es-errors": "^1.3.0",
+                "get-proto": "^1.0.1",
+                "gopd": "^1.2.0",
+                "set-function-name": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -2837,5 +6211,4 @@
             "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
             "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-            "dev": true,
             "license": "MIT",
             "engines": {
@@ -2844,11 +6217,11 @@
         },
         "node_modules/resolve": {
-            "version": "1.22.11",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
-            "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "is-core-module": "^2.16.1",
+            "version": "2.0.0-next.5",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+            "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "is-core-module": "^2.13.0",
                 "path-parse": "^1.0.7",
                 "supports-preserve-symlinks-flag": "^1.0.0"
@@ -2857,9 +6230,16 @@
                 "resolve": "bin/resolve"
             },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/resolve-from": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+            "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=4"
             }
         },
@@ -2876,11 +6256,10 @@
         },
         "node_modules/rollup": {
-            "version": "4.53.3",
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
-            "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@types/estree": "1.0.8"
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz",
+            "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@types/estree": "1.0.6"
             },
             "bin": {
@@ -2892,28 +6271,38 @@
             },
             "optionalDependencies": {
-                "@rollup/rollup-android-arm-eabi": "4.53.3",
-                "@rollup/rollup-android-arm64": "4.53.3",
-                "@rollup/rollup-darwin-arm64": "4.53.3",
-                "@rollup/rollup-darwin-x64": "4.53.3",
-                "@rollup/rollup-freebsd-arm64": "4.53.3",
-                "@rollup/rollup-freebsd-x64": "4.53.3",
-                "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
-                "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
-                "@rollup/rollup-linux-arm64-gnu": "4.53.3",
-                "@rollup/rollup-linux-arm64-musl": "4.53.3",
-                "@rollup/rollup-linux-loong64-gnu": "4.53.3",
-                "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
-                "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
-                "@rollup/rollup-linux-riscv64-musl": "4.53.3",
-                "@rollup/rollup-linux-s390x-gnu": "4.53.3",
-                "@rollup/rollup-linux-x64-gnu": "4.53.3",
-                "@rollup/rollup-linux-x64-musl": "4.53.3",
-                "@rollup/rollup-openharmony-arm64": "4.53.3",
-                "@rollup/rollup-win32-arm64-msvc": "4.53.3",
-                "@rollup/rollup-win32-ia32-msvc": "4.53.3",
-                "@rollup/rollup-win32-x64-gnu": "4.53.3",
-                "@rollup/rollup-win32-x64-msvc": "4.53.3",
+                "@rollup/rollup-android-arm-eabi": "4.34.9",
+                "@rollup/rollup-android-arm64": "4.34.9",
+                "@rollup/rollup-darwin-arm64": "4.34.9",
+                "@rollup/rollup-darwin-x64": "4.34.9",
+                "@rollup/rollup-freebsd-arm64": "4.34.9",
+                "@rollup/rollup-freebsd-x64": "4.34.9",
+                "@rollup/rollup-linux-arm-gnueabihf": "4.34.9",
+                "@rollup/rollup-linux-arm-musleabihf": "4.34.9",
+                "@rollup/rollup-linux-arm64-gnu": "4.34.9",
+                "@rollup/rollup-linux-arm64-musl": "4.34.9",
+                "@rollup/rollup-linux-loongarch64-gnu": "4.34.9",
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9",
+                "@rollup/rollup-linux-riscv64-gnu": "4.34.9",
+                "@rollup/rollup-linux-s390x-gnu": "4.34.9",
+                "@rollup/rollup-linux-x64-gnu": "4.34.9",
+                "@rollup/rollup-linux-x64-musl": "4.34.9",
+                "@rollup/rollup-win32-arm64-msvc": "4.34.9",
+                "@rollup/rollup-win32-ia32-msvc": "4.34.9",
+                "@rollup/rollup-win32-x64-msvc": "4.34.9",
                 "fsevents": "~2.3.2"
             }
+        },
+        "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": {
+            "version": "4.34.9",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz",
+            "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==",
+            "cpu": [
+                "x64"
+            ],
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ]
         },
         "node_modules/run-parallel": {
@@ -2945,5 +6334,4 @@
             "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
             "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
-            "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -2951,10 +6339,223 @@
             }
         },
+        "node_modules/safe-array-concat": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+            "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.2",
+                "get-intrinsic": "^1.2.6",
+                "has-symbols": "^1.1.0",
+                "isarray": "^2.0.5"
+            },
+            "engines": {
+                "node": ">=0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/safe-push-apply": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+            "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "isarray": "^2.0.5"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/safe-regex-test": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+            "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "es-errors": "^1.3.0",
+                "is-regex": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/scheduler": {
+            "version": "0.25.0",
+            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+            "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+            "license": "MIT"
+        },
+        "node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            }
+        },
+        "node_modules/set-function-length": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+            "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-data-property": "^1.1.4",
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.4",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/set-function-name": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+            "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-data-property": "^1.1.4",
+                "es-errors": "^1.3.0",
+                "functions-have-names": "^1.2.3",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/set-proto": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+            "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "dunder-proto": "^1.0.1",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/shebang-command": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/shebang-regex": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/shell-quote": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
-            "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
-            "dev": true,
-            "license": "MIT",
+            "version": "1.8.2",
+            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
+            "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/side-channel": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+            "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+            "license": "MIT",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "object-inspect": "^1.13.3",
+                "side-channel-list": "^1.0.0",
+                "side-channel-map": "^1.0.1",
+                "side-channel-weakmap": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/side-channel-list": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+            "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+            "license": "MIT",
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "object-inspect": "^1.13.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/side-channel-map": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+            "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.5",
+                "object-inspect": "^1.13.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/side-channel-weakmap": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+            "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.5",
+                "object-inspect": "^1.13.3",
+                "side-channel-map": "^1.0.1"
+            },
             "engines": {
                 "node": ">= 0.4"
@@ -2968,5 +6569,4 @@
             "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
             "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-            "dev": true,
             "license": "BSD-3-Clause",
             "engines": {
@@ -2978,5 +6578,4 @@
             "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
             "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -2987,4 +6586,102 @@
             "engines": {
                 "node": ">=8"
+            }
+        },
+        "node_modules/string.prototype.matchall": {
+            "version": "4.0.12",
+            "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+            "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.6",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.0.0",
+                "get-intrinsic": "^1.2.6",
+                "gopd": "^1.2.0",
+                "has-symbols": "^1.1.0",
+                "internal-slot": "^1.1.0",
+                "regexp.prototype.flags": "^1.5.3",
+                "set-function-name": "^2.0.2",
+                "side-channel": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/string.prototype.repeat": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+            "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "define-properties": "^1.1.3",
+                "es-abstract": "^1.17.5"
+            }
+        },
+        "node_modules/string.prototype.trim": {
+            "version": "1.2.10",
+            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+            "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.2",
+                "define-data-property": "^1.1.4",
+                "define-properties": "^1.2.1",
+                "es-abstract": "^1.23.5",
+                "es-object-atoms": "^1.0.0",
+                "has-property-descriptors": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/string.prototype.trimend": {
+            "version": "1.0.9",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+            "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.2",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/string.prototype.trimstart": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+            "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "define-properties": "^1.2.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
@@ -2993,5 +6690,4 @@
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
             "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3002,25 +6698,15 @@
             }
         },
-        "node_modules/sucrase": {
-            "version": "3.35.1",
-            "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
-            "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@jridgewell/gen-mapping": "^0.3.2",
-                "commander": "^4.0.0",
-                "lines-and-columns": "^1.1.6",
-                "mz": "^2.7.0",
-                "pirates": "^4.0.1",
-                "tinyglobby": "^0.2.11",
-                "ts-interface-checker": "^0.1.9"
-            },
-            "bin": {
-                "sucrase": "bin/sucrase",
-                "sucrase-node": "bin/sucrase-node"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
+        "node_modules/strip-json-comments": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+            "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
@@ -3029,5 +6715,4 @@
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
             "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3054,135 +6739,42 @@
             }
         },
+        "node_modules/tabbable": {
+            "version": "6.2.0",
+            "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+            "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+            "license": "MIT"
+        },
+        "node_modules/tailwind-merge": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz",
+            "integrity": "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==",
+            "license": "MIT",
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/dcastil"
+            }
+        },
         "node_modules/tailwindcss": {
-            "version": "3.4.18",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
-            "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@alloc/quick-lru": "^5.2.0",
-                "arg": "^5.0.2",
-                "chokidar": "^3.6.0",
-                "didyoumean": "^1.2.2",
-                "dlv": "^1.1.3",
-                "fast-glob": "^3.3.2",
-                "glob-parent": "^6.0.2",
-                "is-glob": "^4.0.3",
-                "jiti": "^1.21.7",
-                "lilconfig": "^3.1.3",
-                "micromatch": "^4.0.8",
-                "normalize-path": "^3.0.0",
-                "object-hash": "^3.0.0",
-                "picocolors": "^1.1.1",
-                "postcss": "^8.4.47",
-                "postcss-import": "^15.1.0",
-                "postcss-js": "^4.0.1",
-                "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
-                "postcss-nested": "^6.2.0",
-                "postcss-selector-parser": "^6.1.2",
-                "resolve": "^1.22.8",
-                "sucrase": "^3.35.0"
-            },
-            "bin": {
-                "tailwind": "lib/cli.js",
-                "tailwindcss": "lib/cli.js"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            }
-        },
-        "node_modules/tailwindcss/node_modules/jiti": {
-            "version": "1.21.7",
-            "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
-            "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
-            "dev": true,
-            "license": "MIT",
-            "bin": {
-                "jiti": "bin/jiti.js"
+            "version": "4.0.10",
+            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.10.tgz",
+            "integrity": "sha512-Z8U/6E2BWSdDkt3IWPiphoV+8V6aNzRmu2SriSbuhm6i3QIcY3TdUJzUP5NX8M8MZuIl+v4/77Rer8u4YSrSsg==",
+            "license": "MIT"
+        },
+        "node_modules/tailwindcss-animate": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+            "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+            "license": "MIT",
+            "peerDependencies": {
+                "tailwindcss": ">=3.0.0 || insiders"
             }
         },
         "node_modules/tapable": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
-            "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
-            "dev": true,
+            "version": "2.2.1",
+            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+            "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
             "license": "MIT",
             "engines": {
                 "node": ">=6"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/webpack"
-            }
-        },
-        "node_modules/thenify": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-            "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "any-promise": "^1.0.0"
-            }
-        },
-        "node_modules/thenify-all": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-            "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "thenify": ">= 3.1.0 < 4"
-            },
-            "engines": {
-                "node": ">=0.8"
-            }
-        },
-        "node_modules/tinyglobby": {
-            "version": "0.2.15",
-            "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
-            "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "fdir": "^6.5.0",
-                "picomatch": "^4.0.3"
-            },
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/SuperchupuDev"
-            }
-        },
-        "node_modules/tinyglobby/node_modules/fdir": {
-            "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
-            "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "peerDependencies": {
-                "picomatch": "^3 || ^4"
-            },
-            "peerDependenciesMeta": {
-                "picomatch": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/tinyglobby/node_modules/picomatch": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
-            "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
             }
         },
@@ -3204,5 +6796,4 @@
             "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
             "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
-            "dev": true,
             "license": "MIT",
             "bin": {
@@ -3210,10 +6801,16 @@
             }
         },
-        "node_modules/ts-interface-checker": {
-            "version": "0.1.13",
-            "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
-            "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
-            "dev": true,
-            "license": "Apache-2.0"
+        "node_modules/ts-api-utils": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
+            "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18.12"
+            },
+            "peerDependencies": {
+                "typescript": ">=4.8.4"
+            }
         },
         "node_modules/tslib": {
@@ -3221,12 +6818,163 @@
             "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
             "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-            "dev": true,
             "license": "0BSD"
         },
+        "node_modules/type-check": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+            "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "prelude-ls": "^1.2.1"
+            },
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/typed-array-buffer": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+            "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "es-errors": "^1.3.0",
+                "is-typed-array": "^1.1.14"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/typed-array-byte-length": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+            "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.8",
+                "for-each": "^0.3.3",
+                "gopd": "^1.2.0",
+                "has-proto": "^1.2.0",
+                "is-typed-array": "^1.1.14"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/typed-array-byte-offset": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+            "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.8",
+                "for-each": "^0.3.3",
+                "gopd": "^1.2.0",
+                "has-proto": "^1.2.0",
+                "is-typed-array": "^1.1.15",
+                "reflect.getprototypeof": "^1.0.9"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/typed-array-length": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+            "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bind": "^1.0.7",
+                "for-each": "^0.3.3",
+                "gopd": "^1.0.1",
+                "is-typed-array": "^1.1.13",
+                "possible-typed-array-names": "^1.0.0",
+                "reflect.getprototypeof": "^1.0.6"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/typescript": {
+            "version": "5.8.2",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+            "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
+            "license": "Apache-2.0",
+            "bin": {
+                "tsc": "bin/tsc",
+                "tsserver": "bin/tsserver"
+            },
+            "engines": {
+                "node": ">=14.17"
+            }
+        },
+        "node_modules/typescript-eslint": {
+            "version": "8.26.0",
+            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz",
+            "integrity": "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@typescript-eslint/eslint-plugin": "8.26.0",
+                "@typescript-eslint/parser": "8.26.0",
+                "@typescript-eslint/utils": "8.26.0"
+            },
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/typescript-eslint"
+            },
+            "peerDependencies": {
+                "eslint": "^8.57.0 || ^9.0.0",
+                "typescript": ">=4.8.4 <5.9.0"
+            }
+        },
+        "node_modules/unbox-primitive": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+            "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.3",
+                "has-bigints": "^1.0.2",
+                "has-symbols": "^1.1.0",
+                "which-boxed-primitive": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/undici-types": {
+            "version": "6.20.0",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+            "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+            "devOptional": true,
+            "license": "MIT"
+        },
         "node_modules/update-browserslist-db": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
-            "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
-            "dev": true,
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+            "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
             "funding": [
                 {
@@ -3255,24 +7003,66 @@
             }
         },
-        "node_modules/util-deprecate": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-            "dev": true,
-            "license": "MIT"
+        "node_modules/uri-js": {
+            "version": "4.4.1",
+            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "punycode": "^2.1.0"
+            }
+        },
+        "node_modules/use-callback-ref": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+            "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+            "license": "MIT",
+            "dependencies": {
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/use-sidecar": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+            "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+            "license": "MIT",
+            "dependencies": {
+                "detect-node-es": "^1.1.0",
+                "tslib": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                }
+            }
         },
         "node_modules/vite": {
-            "version": "7.2.4",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
-            "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
-            "dev": true,
+            "version": "6.2.0",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
+            "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
             "license": "MIT",
             "dependencies": {
                 "esbuild": "^0.25.0",
-                "fdir": "^6.5.0",
-                "picomatch": "^4.0.3",
-                "postcss": "^8.5.6",
-                "rollup": "^4.43.0",
-                "tinyglobby": "^0.2.15"
+                "postcss": "^8.5.3",
+                "rollup": "^4.30.1"
             },
             "bin": {
@@ -3280,5 +7070,5 @@
             },
             "engines": {
-                "node": "^20.19.0 || >=22.12.0"
+                "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
             },
             "funding": {
@@ -3289,12 +7079,12 @@
             },
             "peerDependencies": {
-                "@types/node": "^20.19.0 || >=22.12.0",
+                "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
                 "jiti": ">=1.21.0",
-                "less": "^4.0.0",
+                "less": "*",
                 "lightningcss": "^1.21.0",
-                "sass": "^1.70.0",
-                "sass-embedded": "^1.70.0",
-                "stylus": ">=0.54.8",
-                "sugarss": "^5.0.0",
+                "sass": "*",
+                "sass-embedded": "*",
+                "stylus": "*",
+                "sugarss": "*",
                 "terser": "^5.16.0",
                 "tsx": "^4.8.1",
@@ -3341,5 +7131,4 @@
             "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
             "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3348,33 +7137,116 @@
             }
         },
-        "node_modules/vite/node_modules/fdir": {
-            "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
-            "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "peerDependencies": {
-                "picomatch": "^3 || ^4"
-            },
-            "peerDependenciesMeta": {
-                "picomatch": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/vite/node_modules/picomatch": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
-            "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
+        "node_modules/which": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "node-which": "bin/node-which"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
+        "node_modules/which-boxed-primitive": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+            "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "is-bigint": "^1.1.0",
+                "is-boolean-object": "^1.2.1",
+                "is-number-object": "^1.1.1",
+                "is-string": "^1.1.1",
+                "is-symbol": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/which-builtin-type": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+            "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "call-bound": "^1.0.2",
+                "function.prototype.name": "^1.1.6",
+                "has-tostringtag": "^1.0.2",
+                "is-async-function": "^2.0.0",
+                "is-date-object": "^1.1.0",
+                "is-finalizationregistry": "^1.1.0",
+                "is-generator-function": "^1.0.10",
+                "is-regex": "^1.2.1",
+                "is-weakref": "^1.0.2",
+                "isarray": "^2.0.5",
+                "which-boxed-primitive": "^1.1.0",
+                "which-collection": "^1.0.2",
+                "which-typed-array": "^1.1.16"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/which-collection": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+            "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "is-map": "^2.0.3",
+                "is-set": "^2.0.3",
+                "is-weakmap": "^2.0.2",
+                "is-weakset": "^2.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/which-typed-array": {
+            "version": "1.1.18",
+            "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
+            "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "available-typed-arrays": "^1.0.7",
+                "call-bind": "^1.0.8",
+                "call-bound": "^1.0.3",
+                "for-each": "^0.3.3",
+                "gopd": "^1.2.0",
+                "has-tostringtag": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
+        "node_modules/word-wrap": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+            "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
@@ -3383,5 +7255,4 @@
             "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
             "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3401,9 +7272,14 @@
             "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
             "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-            "dev": true,
             "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
+        },
+        "node_modules/yallist": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+            "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+            "license": "ISC"
         },
         "node_modules/yargs": {
@@ -3411,5 +7287,4 @@
             "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
             "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-            "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3430,8 +7305,20 @@
             "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
             "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-            "dev": true,
             "license": "ISC",
             "engines": {
                 "node": ">=12"
+            }
+        },
+        "node_modules/yocto-queue": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+            "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         }
Index: package.json
===================================================================
--- package.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ package.json	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,21 +1,64 @@
 {
-    "$schema": "https://www.schemastore.org/package.json",
     "private": true,
     "type": "module",
     "scripts": {
         "build": "vite build",
-        "dev": "vite"
+        "build:ssr": "vite build && vite build --ssr",
+        "dev": "vite",
+        "format": "prettier --write resources/",
+        "format:check": "prettier --check resources/",
+        "lint": "eslint . --fix",
+        "types": "tsc --noEmit"
     },
     "devDependencies": {
-        "@tailwindcss/forms": "^0.5.2",
-        "@tailwindcss/vite": "^4.0.0",
-        "alpinejs": "^3.4.2",
-        "autoprefixer": "^10.4.2",
-        "axios": "^1.11.0",
+        "@eslint/js": "^9.19.0",
+        "@types/node": "^22.13.5",
+        "eslint": "^9.17.0",
+        "eslint-config-prettier": "^10.0.1",
+        "eslint-plugin-react": "^7.37.3",
+        "eslint-plugin-react-hooks": "^5.1.0",
+        "prettier": "^3.4.2",
+        "prettier-plugin-organize-imports": "^4.1.0",
+        "prettier-plugin-tailwindcss": "^0.6.11",
+        "typescript-eslint": "^8.23.0"
+    },
+    "dependencies": {
+        "@headlessui/react": "^2.2.0",
+        "@inertiajs/react": "^2.0.0",
+        "@radix-ui/react-avatar": "^1.1.3",
+        "@radix-ui/react-checkbox": "^1.1.4",
+        "@radix-ui/react-collapsible": "^1.1.3",
+        "@radix-ui/react-dialog": "^1.1.6",
+        "@radix-ui/react-dropdown-menu": "^2.1.6",
+        "@radix-ui/react-label": "^2.1.2",
+        "@radix-ui/react-navigation-menu": "^1.2.5",
+        "@radix-ui/react-select": "^2.1.6",
+        "@radix-ui/react-separator": "^1.1.2",
+        "@radix-ui/react-slot": "^1.1.2",
+        "@radix-ui/react-toggle": "^1.1.2",
+        "@radix-ui/react-toggle-group": "^1.1.2",
+        "@radix-ui/react-tooltip": "^1.1.8",
+        "@tailwindcss/vite": "^4.0.6",
+        "@types/react": "^19.0.3",
+        "@types/react-dom": "^19.0.2",
+        "@vitejs/plugin-react": "^4.3.4",
+        "class-variance-authority": "^0.7.1",
+        "clsx": "^2.1.1",
         "concurrently": "^9.0.1",
-        "laravel-vite-plugin": "^2.0.0",
-        "postcss": "^8.4.31",
-        "tailwindcss": "^3.1.0",
-        "vite": "^7.0.7"
+        "globals": "^15.14.0",
+        "laravel-vite-plugin": "^1.0",
+        "lucide-react": "^0.475.0",
+        "react": "^19.0.0",
+        "react-dom": "^19.0.0",
+        "tailwind-merge": "^3.0.1",
+        "tailwindcss": "^4.0.0",
+        "tailwindcss-animate": "^1.0.7",
+        "typescript": "^5.7.2",
+        "vite": "^6.0"
+    },
+    "optionalDependencies": {
+        "@rollup/rollup-linux-x64-gnu": "4.9.5",
+        "@tailwindcss/oxide-linux-x64-gnu": "^4.0.1",
+        "lightningcss-linux-x64-gnu": "^1.29.1"
     }
 }
Index: phpunit.xml
===================================================================
--- phpunit.xml	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ phpunit.xml	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -22,14 +22,12 @@
         <env name="APP_MAINTENANCE_DRIVER" value="file"/>
         <env name="BCRYPT_ROUNDS" value="4"/>
-        <env name="BROADCAST_CONNECTION" value="null"/>
         <env name="CACHE_STORE" value="array"/>
         <env name="DB_CONNECTION" value="sqlite"/>
         <env name="DB_DATABASE" value=":memory:"/>
         <env name="MAIL_MAILER" value="array"/>
+        <env name="PULSE_ENABLED" value="false"/>
         <env name="QUEUE_CONNECTION" value="sync"/>
         <env name="SESSION_DRIVER" value="array"/>
-        <env name="PULSE_ENABLED" value="false"/>
         <env name="TELESCOPE_ENABLED" value="false"/>
-        <env name="NIGHTWATCH_ENABLED" value="false"/>
     </php>
 </phpunit>
Index: stcss.config.js
===================================================================
--- postcss.config.js	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,6 +1,0 @@
-export default {
-    plugins: {
-        tailwindcss: {},
-        autoprefixer: {},
-    },
-};
Index: public/favicon.svg
===================================================================
--- public/favicon.svg	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ public/favicon.svg	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,3 @@
+<svg width="166" height="166" viewBox="0 0 166 166" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M162.041 38.7592C162.099 38.9767 162.129 39.201 162.13 39.4264V74.4524C162.13 74.9019 162.011 75.3435 161.786 75.7325C161.561 76.1216 161.237 76.4442 160.847 76.6678L131.462 93.5935V127.141C131.462 128.054 130.977 128.897 130.186 129.357L68.8474 164.683C68.707 164.763 68.5538 164.814 68.4007 164.868C68.3432 164.887 68.289 164.922 68.2284 164.938C67.7996 165.051 67.3489 165.051 66.9201 164.938C66.8499 164.919 66.7861 164.881 66.7191 164.855C66.5787 164.804 66.4319 164.76 66.2979 164.683L4.97219 129.357C4.58261 129.133 4.2589 128.81 4.0337 128.421C3.8085 128.032 3.68976 127.591 3.68945 127.141L3.68945 22.0634C3.68945 21.8336 3.72136 21.6101 3.7788 21.393C3.79794 21.3196 3.84262 21.2526 3.86814 21.1791C3.91601 21.0451 3.96068 20.9078 4.03088 20.7833C4.07874 20.7003 4.14894 20.6333 4.20638 20.5566C4.27977 20.4545 4.34678 20.3491 4.43293 20.2598C4.50632 20.1863 4.60205 20.1321 4.68501 20.0682C4.77755 19.9916 4.86051 19.9086 4.96581 19.848L35.6334 2.18492C36.0217 1.96139 36.4618 1.84375 36.9098 1.84375C37.3578 1.84375 37.7979 1.96139 38.1862 2.18492L68.8506 19.848H68.857C68.9591 19.9118 69.0452 19.9916 69.1378 20.065C69.2207 20.1289 69.3133 20.1863 69.3867 20.2566C69.476 20.3491 69.5398 20.4545 69.6164 20.5566C69.6707 20.6333 69.7441 20.7003 69.7887 20.7833C69.8621 20.911 69.9036 21.0451 69.9546 21.1791C69.9802 21.2526 70.0248 21.3196 70.044 21.3962C70.1027 21.6138 70.1328 21.8381 70.1333 22.0634V87.6941L95.686 72.9743V39.4232C95.686 39.1997 95.7179 38.9731 95.7753 38.7592C95.7977 38.6826 95.8391 38.6155 95.8647 38.5421C95.9157 38.408 95.9604 38.2708 96.0306 38.1463C96.0785 38.0633 96.1487 37.9962 96.2029 37.9196C96.2795 37.8175 96.3433 37.7121 96.4326 37.6227C96.506 37.5493 96.5986 37.495 96.6815 37.4312C96.7773 37.3546 96.8602 37.2716 96.9623 37.2109L127.633 19.5479C128.021 19.324 128.461 19.2062 128.91 19.2062C129.358 19.2062 129.798 19.324 130.186 19.5479L160.85 37.2109C160.959 37.2748 161.042 37.3546 161.137 37.428C161.217 37.4918 161.31 37.5493 161.383 37.6195C161.473 37.7121 161.536 37.8175 161.613 37.9196C161.67 37.9962 161.741 38.0633 161.785 38.1463C161.859 38.2708 161.9 38.408 161.951 38.5421C161.98 38.6155 162.021 38.6826 162.041 38.7592ZM157.018 72.9743V43.8477L146.287 50.028L131.462 58.5675V87.6941L157.021 72.9743H157.018ZM126.354 125.663V96.5176L111.771 104.85L70.1301 128.626V158.046L126.354 125.663ZM8.80126 26.4848V125.663L65.0183 158.043V128.629L35.6494 112L35.6398 111.994L35.6271 111.988C35.5281 111.93 35.4452 111.847 35.3526 111.777C35.2729 111.713 35.1803 111.662 35.1101 111.592L35.1038 111.582C35.0208 111.502 34.9634 111.403 34.8932 111.314C34.8293 111.228 34.7528 111.154 34.7017 111.065L34.6985 111.055C34.6411 110.96 34.606 110.845 34.5645 110.736C34.523 110.64 34.4688 110.551 34.4432 110.449C34.4113 110.328 34.4049 110.197 34.3922 110.072C34.3794 109.976 34.3539 109.881 34.3539 109.785V109.778V41.2045L19.5322 32.6619L8.80126 26.4848ZM36.913 7.35007L11.3635 22.0634L36.9066 36.7768L62.4529 22.0602L36.9066 7.35007H36.913ZM50.1999 99.1736L65.0215 90.6374V26.4848L54.2906 32.6651L39.4657 41.2045V105.357L50.1999 99.1736ZM128.91 24.713L103.363 39.4264L128.91 54.1397L154.453 39.4232L128.91 24.713ZM126.354 58.5675L111.529 50.028L100.798 43.8477V72.9743L115.619 81.5106L126.354 87.6941V58.5675ZM67.5711 124.205L105.042 102.803L123.772 92.109L98.2451 77.4053L68.8538 94.3341L42.0663 109.762L67.5711 124.205Z" fill="#FF2D20"/>
+</svg>
Index: public/logo.svg
===================================================================
--- public/logo.svg	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ public/logo.svg	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,16 @@
+<svg width="1991" height="500" viewBox="0 0 1991 500" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-outside-1_1_7" maskUnits="userSpaceOnUse" x="765" y="175" width="253" height="226" fill="black">
+<rect fill="white" x="765" y="175" width="253" height="226"/>
+<path d="M971.537 248.894C968.887 247.988 966.217 247.145 963.529 246.365C963.975 244.551 964.386 242.726 964.763 240.892C970.827 211.403 966.862 187.646 953.33 179.825C940.374 172.321 919.125 180.141 897.69 198.84C895.582 200.685 893.518 202.585 891.496 204.541C890.149 203.242 888.767 201.97 887.35 200.727C864.884 180.732 842.365 172.31 828.849 180.157C815.893 187.677 812.042 210.009 817.499 237.958C818.045 240.722 818.658 243.474 819.339 246.214C816.152 247.121 813.073 248.09 810.13 249.117C783.823 258.316 767 272.739 767 287.696C767 303.15 785.056 318.646 812.488 328.042C814.713 328.799 816.959 329.502 819.225 330.152C818.489 333.085 817.838 336.051 817.271 339.05C812.089 366.518 816.131 388.321 829.062 395.795C842.417 403.511 864.822 395.582 886.661 376.458C888.389 374.945 890.116 373.347 891.844 371.664C894.027 373.775 896.273 375.824 898.581 377.811C919.726 396.043 940.607 403.408 953.517 395.914C966.862 388.171 971.2 364.746 965.566 336.246C965.134 334.07 964.637 331.848 964.074 329.582C965.649 329.115 967.192 328.633 968.702 328.136C997.206 318.667 1015.78 303.358 1015.78 287.711C1015.76 272.682 998.403 258.165 971.537 248.894ZM904.681 206.873C923.043 190.854 940.208 184.531 948.033 189.05C956.362 193.865 959.601 213.279 954.367 238.741C954.021 240.399 953.648 242.053 953.247 243.701C942.289 241.208 931.177 239.449 919.985 238.435C913.577 229.204 906.553 220.417 898.959 212.133C900.818 210.33 902.722 208.576 904.671 206.873H904.681ZM840.453 300.476C842.702 304.829 845.053 309.129 847.507 313.376C850.005 317.708 852.608 321.977 855.317 326.182C847.616 325.345 839.963 324.111 832.389 322.487C834.586 315.376 837.292 307.991 840.453 300.476ZM840.453 275.429C837.343 268.074 834.711 260.84 832.55 253.853C839.65 252.262 847.216 250.962 855.104 249.977C852.461 254.102 849.918 258.288 847.475 262.534C845.033 266.781 842.687 271.079 840.437 275.429H840.453ZM846.102 287.955C849.377 281.124 852.905 274.425 856.685 267.857C860.461 261.292 864.481 254.878 868.745 248.614C876.146 248.054 883.733 247.759 891.398 247.759C899.063 247.759 906.697 248.054 914.093 248.619C918.311 254.869 922.307 261.261 926.08 267.795C929.853 274.328 933.427 280.996 936.803 287.799C933.472 294.654 929.906 301.381 926.106 307.981C922.336 314.545 918.363 320.978 914.186 327.281C906.801 327.799 899.156 328.084 891.382 328.084C883.609 328.084 876.109 327.84 868.859 327.369C864.564 321.084 860.511 314.642 856.7 308.043C852.89 301.444 849.352 294.748 846.087 287.955H846.102ZM935.305 313.303C937.81 308.957 940.215 304.553 942.519 300.093C945.678 307.255 948.467 314.576 950.874 322.025C943.21 323.751 935.462 325.074 927.661 325.99C930.293 321.813 932.842 317.584 935.305 313.303ZM942.416 275.434C940.121 271.063 937.736 266.744 935.258 262.477C932.84 258.269 930.319 254.113 927.697 250.008C935.632 251.013 943.245 252.35 950.381 253.983C948.087 261.262 945.428 268.421 942.416 275.434ZM891.502 219.747C896.677 225.401 901.563 231.314 906.143 237.461C896.347 236.994 886.545 236.994 876.736 237.461C881.572 231.066 886.521 225.131 891.502 219.747ZM834.198 189.366C842.521 184.536 860.924 191.439 880.323 208.682C881.561 209.786 882.81 210.941 884.054 212.139C876.422 220.421 869.348 229.201 862.878 238.42C851.711 239.426 840.621 241.157 829.678 243.602C829.046 241.059 828.476 238.499 827.968 235.922C823.278 211.962 826.382 193.901 834.198 189.366ZM822.065 319.89C819.992 319.299 817.945 318.658 815.924 317.967C803.796 313.821 793.779 308.411 786.901 302.518C780.744 297.237 777.624 291.966 777.624 287.696C777.624 278.621 791.13 267.043 813.654 259.191C816.483 258.207 819.337 257.307 822.215 256.491C825.561 267.242 829.612 277.759 834.343 287.976C829.555 298.333 825.454 308.994 822.065 319.89ZM879.659 368.436C870.004 376.894 860.333 382.89 851.808 385.911C844.148 388.622 838.048 388.7 834.363 386.569C826.517 382.035 823.252 364.523 827.704 341.035C828.232 338.271 828.837 335.507 829.518 332.743C840.57 335.124 851.771 336.75 863.044 337.609C869.577 346.876 876.71 355.706 884.396 364.041C882.852 365.559 881.271 367.021 879.659 368.436ZM891.797 356.402C886.76 350.955 881.732 344.927 876.83 338.449C881.594 338.636 886.445 338.729 891.382 338.729C896.451 338.729 901.468 338.62 906.412 338.397C901.849 344.643 896.971 350.652 891.797 356.402ZM956.331 371.219C954.849 379.221 951.869 384.559 948.184 386.694C940.342 391.244 923.577 385.331 905.5 369.736C903.427 367.954 901.354 366.041 899.244 364.036C906.781 355.668 913.747 346.803 920.094 337.501C931.429 336.54 942.685 334.8 953.781 332.292C954.289 334.344 954.738 336.355 955.128 338.325C957.621 350.918 957.979 362.31 956.331 371.219ZM965.349 318.024C963.991 318.475 962.591 318.911 961.171 319.336C957.692 308.535 953.483 297.983 948.572 287.753C953.299 277.659 957.343 267.26 960.679 256.626C963.224 257.367 965.696 258.145 968.075 258.969C991.096 266.908 1005.14 278.663 1005.14 287.696C1005.14 297.335 989.971 309.846 965.349 318.024Z"/>
+</mask>
+<path d="M971.537 248.894C968.887 247.988 966.217 247.145 963.529 246.365C963.975 244.551 964.386 242.726 964.763 240.892C970.827 211.403 966.862 187.646 953.33 179.825C940.374 172.321 919.125 180.141 897.69 198.84C895.582 200.685 893.518 202.585 891.496 204.541C890.149 203.242 888.767 201.97 887.35 200.727C864.884 180.732 842.365 172.31 828.849 180.157C815.893 187.677 812.042 210.009 817.499 237.958C818.045 240.722 818.658 243.474 819.339 246.214C816.152 247.121 813.073 248.09 810.13 249.117C783.823 258.316 767 272.739 767 287.696C767 303.15 785.056 318.646 812.488 328.042C814.713 328.799 816.959 329.502 819.225 330.152C818.489 333.085 817.838 336.051 817.271 339.05C812.089 366.518 816.131 388.321 829.062 395.795C842.417 403.511 864.822 395.582 886.661 376.458C888.389 374.945 890.116 373.347 891.844 371.664C894.027 373.775 896.273 375.824 898.581 377.811C919.726 396.043 940.607 403.408 953.517 395.914C966.862 388.171 971.2 364.746 965.566 336.246C965.134 334.07 964.637 331.848 964.074 329.582C965.649 329.115 967.192 328.633 968.702 328.136C997.206 318.667 1015.78 303.358 1015.78 287.711C1015.76 272.682 998.403 258.165 971.537 248.894ZM904.681 206.873C923.043 190.854 940.208 184.531 948.033 189.05C956.362 193.865 959.601 213.279 954.367 238.741C954.021 240.399 953.648 242.053 953.247 243.701C942.289 241.208 931.177 239.449 919.985 238.435C913.577 229.204 906.553 220.417 898.959 212.133C900.818 210.33 902.722 208.576 904.671 206.873H904.681ZM840.453 300.476C842.702 304.829 845.053 309.129 847.507 313.376C850.005 317.708 852.608 321.977 855.317 326.182C847.616 325.345 839.963 324.111 832.389 322.487C834.586 315.376 837.292 307.991 840.453 300.476ZM840.453 275.429C837.343 268.074 834.711 260.84 832.55 253.853C839.65 252.262 847.216 250.962 855.104 249.977C852.461 254.102 849.918 258.288 847.475 262.534C845.033 266.781 842.687 271.079 840.437 275.429H840.453ZM846.102 287.955C849.377 281.124 852.905 274.425 856.685 267.857C860.461 261.292 864.481 254.878 868.745 248.614C876.146 248.054 883.733 247.759 891.398 247.759C899.063 247.759 906.697 248.054 914.093 248.619C918.311 254.869 922.307 261.261 926.08 267.795C929.853 274.328 933.427 280.996 936.803 287.799C933.472 294.654 929.906 301.381 926.106 307.981C922.336 314.545 918.363 320.978 914.186 327.281C906.801 327.799 899.156 328.084 891.382 328.084C883.609 328.084 876.109 327.84 868.859 327.369C864.564 321.084 860.511 314.642 856.7 308.043C852.89 301.444 849.352 294.748 846.087 287.955H846.102ZM935.305 313.303C937.81 308.957 940.215 304.553 942.519 300.093C945.678 307.255 948.467 314.576 950.874 322.025C943.21 323.751 935.462 325.074 927.661 325.99C930.293 321.813 932.842 317.584 935.305 313.303ZM942.416 275.434C940.121 271.063 937.736 266.744 935.258 262.477C932.84 258.269 930.319 254.113 927.697 250.008C935.632 251.013 943.245 252.35 950.381 253.983C948.087 261.262 945.428 268.421 942.416 275.434ZM891.502 219.747C896.677 225.401 901.563 231.314 906.143 237.461C896.347 236.994 886.545 236.994 876.736 237.461C881.572 231.066 886.521 225.131 891.502 219.747ZM834.198 189.366C842.521 184.536 860.924 191.439 880.323 208.682C881.561 209.786 882.81 210.941 884.054 212.139C876.422 220.421 869.348 229.201 862.878 238.42C851.711 239.426 840.621 241.157 829.678 243.602C829.046 241.059 828.476 238.499 827.968 235.922C823.278 211.962 826.382 193.901 834.198 189.366ZM822.065 319.89C819.992 319.299 817.945 318.658 815.924 317.967C803.796 313.821 793.779 308.411 786.901 302.518C780.744 297.237 777.624 291.966 777.624 287.696C777.624 278.621 791.13 267.043 813.654 259.191C816.483 258.207 819.337 257.307 822.215 256.491C825.561 267.242 829.612 277.759 834.343 287.976C829.555 298.333 825.454 308.994 822.065 319.89ZM879.659 368.436C870.004 376.894 860.333 382.89 851.808 385.911C844.148 388.622 838.048 388.7 834.363 386.569C826.517 382.035 823.252 364.523 827.704 341.035C828.232 338.271 828.837 335.507 829.518 332.743C840.57 335.124 851.771 336.75 863.044 337.609C869.577 346.876 876.71 355.706 884.396 364.041C882.852 365.559 881.271 367.021 879.659 368.436ZM891.797 356.402C886.76 350.955 881.732 344.927 876.83 338.449C881.594 338.636 886.445 338.729 891.382 338.729C896.451 338.729 901.468 338.62 906.412 338.397C901.849 344.643 896.971 350.652 891.797 356.402ZM956.331 371.219C954.849 379.221 951.869 384.559 948.184 386.694C940.342 391.244 923.577 385.331 905.5 369.736C903.427 367.954 901.354 366.041 899.244 364.036C906.781 355.668 913.747 346.803 920.094 337.501C931.429 336.54 942.685 334.8 953.781 332.292C954.289 334.344 954.738 336.355 955.128 338.325C957.621 350.918 957.979 362.31 956.331 371.219ZM965.349 318.024C963.991 318.475 962.591 318.911 961.171 319.336C957.692 308.535 953.483 297.983 948.572 287.753C953.299 277.659 957.343 267.26 960.679 256.626C963.224 257.367 965.696 258.145 968.075 258.969C991.096 266.908 1005.14 278.663 1005.14 287.696C1005.14 297.335 989.971 309.846 965.349 318.024Z" fill="#FF2D20"/>
+<path d="M971.537 248.894C968.887 247.988 966.217 247.145 963.529 246.365C963.975 244.551 964.386 242.726 964.763 240.892C970.827 211.403 966.862 187.646 953.33 179.825C940.374 172.321 919.125 180.141 897.69 198.84C895.582 200.685 893.518 202.585 891.496 204.541C890.149 203.242 888.767 201.97 887.35 200.727C864.884 180.732 842.365 172.31 828.849 180.157C815.893 187.677 812.042 210.009 817.499 237.958C818.045 240.722 818.658 243.474 819.339 246.214C816.152 247.121 813.073 248.09 810.13 249.117C783.823 258.316 767 272.739 767 287.696C767 303.15 785.056 318.646 812.488 328.042C814.713 328.799 816.959 329.502 819.225 330.152C818.489 333.085 817.838 336.051 817.271 339.05C812.089 366.518 816.131 388.321 829.062 395.795C842.417 403.511 864.822 395.582 886.661 376.458C888.389 374.945 890.116 373.347 891.844 371.664C894.027 373.775 896.273 375.824 898.581 377.811C919.726 396.043 940.607 403.408 953.517 395.914C966.862 388.171 971.2 364.746 965.566 336.246C965.134 334.07 964.637 331.848 964.074 329.582C965.649 329.115 967.192 328.633 968.702 328.136C997.206 318.667 1015.78 303.358 1015.78 287.711C1015.76 272.682 998.403 258.165 971.537 248.894ZM904.681 206.873C923.043 190.854 940.208 184.531 948.033 189.05C956.362 193.865 959.601 213.279 954.367 238.741C954.021 240.399 953.648 242.053 953.247 243.701C942.289 241.208 931.177 239.449 919.985 238.435C913.577 229.204 906.553 220.417 898.959 212.133C900.818 210.33 902.722 208.576 904.671 206.873H904.681ZM840.453 300.476C842.702 304.829 845.053 309.129 847.507 313.376C850.005 317.708 852.608 321.977 855.317 326.182C847.616 325.345 839.963 324.111 832.389 322.487C834.586 315.376 837.292 307.991 840.453 300.476ZM840.453 275.429C837.343 268.074 834.711 260.84 832.55 253.853C839.65 252.262 847.216 250.962 855.104 249.977C852.461 254.102 849.918 258.288 847.475 262.534C845.033 266.781 842.687 271.079 840.437 275.429H840.453ZM846.102 287.955C849.377 281.124 852.905 274.425 856.685 267.857C860.461 261.292 864.481 254.878 868.745 248.614C876.146 248.054 883.733 247.759 891.398 247.759C899.063 247.759 906.697 248.054 914.093 248.619C918.311 254.869 922.307 261.261 926.08 267.795C929.853 274.328 933.427 280.996 936.803 287.799C933.472 294.654 929.906 301.381 926.106 307.981C922.336 314.545 918.363 320.978 914.186 327.281C906.801 327.799 899.156 328.084 891.382 328.084C883.609 328.084 876.109 327.84 868.859 327.369C864.564 321.084 860.511 314.642 856.7 308.043C852.89 301.444 849.352 294.748 846.087 287.955H846.102ZM935.305 313.303C937.81 308.957 940.215 304.553 942.519 300.093C945.678 307.255 948.467 314.576 950.874 322.025C943.21 323.751 935.462 325.074 927.661 325.99C930.293 321.813 932.842 317.584 935.305 313.303ZM942.416 275.434C940.121 271.063 937.736 266.744 935.258 262.477C932.84 258.269 930.319 254.113 927.697 250.008C935.632 251.013 943.245 252.35 950.381 253.983C948.087 261.262 945.428 268.421 942.416 275.434ZM891.502 219.747C896.677 225.401 901.563 231.314 906.143 237.461C896.347 236.994 886.545 236.994 876.736 237.461C881.572 231.066 886.521 225.131 891.502 219.747ZM834.198 189.366C842.521 184.536 860.924 191.439 880.323 208.682C881.561 209.786 882.81 210.941 884.054 212.139C876.422 220.421 869.348 229.201 862.878 238.42C851.711 239.426 840.621 241.157 829.678 243.602C829.046 241.059 828.476 238.499 827.968 235.922C823.278 211.962 826.382 193.901 834.198 189.366ZM822.065 319.89C819.992 319.299 817.945 318.658 815.924 317.967C803.796 313.821 793.779 308.411 786.901 302.518C780.744 297.237 777.624 291.966 777.624 287.696C777.624 278.621 791.13 267.043 813.654 259.191C816.483 258.207 819.337 257.307 822.215 256.491C825.561 267.242 829.612 277.759 834.343 287.976C829.555 298.333 825.454 308.994 822.065 319.89ZM879.659 368.436C870.004 376.894 860.333 382.89 851.808 385.911C844.148 388.622 838.048 388.7 834.363 386.569C826.517 382.035 823.252 364.523 827.704 341.035C828.232 338.271 828.837 335.507 829.518 332.743C840.57 335.124 851.771 336.75 863.044 337.609C869.577 346.876 876.71 355.706 884.396 364.041C882.852 365.559 881.271 367.021 879.659 368.436ZM891.797 356.402C886.76 350.955 881.732 344.927 876.83 338.449C881.594 338.636 886.445 338.729 891.382 338.729C896.451 338.729 901.468 338.62 906.412 338.397C901.849 344.643 896.971 350.652 891.797 356.402ZM956.331 371.219C954.849 379.221 951.869 384.559 948.184 386.694C940.342 391.244 923.577 385.331 905.5 369.736C903.427 367.954 901.354 366.041 899.244 364.036C906.781 355.668 913.747 346.803 920.094 337.501C931.429 336.54 942.685 334.8 953.781 332.292C954.289 334.344 954.738 336.355 955.128 338.325C957.621 350.918 957.979 362.31 956.331 371.219ZM965.349 318.024C963.991 318.475 962.591 318.911 961.171 319.336C957.692 308.535 953.483 297.983 948.572 287.753C953.299 277.659 957.343 267.26 960.679 256.626C963.224 257.367 965.696 258.145 968.075 258.969C991.096 266.908 1005.14 278.663 1005.14 287.696C1005.14 297.335 989.971 309.846 965.349 318.024Z" stroke="#FF2D20" stroke-width="4" mask="url(#path-1-outside-1_1_7)"/>
+<path d="M891.382 309.96C895.793 309.974 900.109 308.679 903.783 306.24C907.457 303.8 910.325 300.324 912.023 296.253C913.721 292.182 914.172 287.699 913.321 283.372C912.469 279.044 910.352 275.066 907.239 271.943C904.125 268.819 900.154 266.689 895.829 265.823C891.504 264.957 887.02 265.394 882.944 267.079C878.867 268.764 875.383 271.62 872.931 275.286C870.479 278.953 869.17 283.264 869.17 287.675C869.164 290.597 869.733 293.492 870.847 296.193C871.96 298.895 873.595 301.351 875.658 303.421C877.72 305.49 880.171 307.133 882.869 308.255C885.567 309.377 888.46 309.957 891.382 309.96Z" fill="#FF2D20"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M484.904 113.113C485.084 113.78 485.176 114.467 485.178 115.157V222.481C485.178 223.859 484.815 225.212 484.125 226.404C483.435 227.596 482.443 228.584 481.25 229.27L391.267 281.132V383.926C391.267 386.724 389.782 389.306 387.359 390.715L199.527 498.958C199.097 499.202 198.628 499.359 198.159 499.525C197.984 499.584 197.817 499.691 197.632 499.74C196.319 500.087 194.939 500.087 193.626 499.74C193.411 499.682 193.215 499.564 193.01 499.486C192.58 499.33 192.131 499.193 191.72 498.958L3.92801 390.715C2.73502 390.029 1.74377 389.04 1.05416 387.848C0.364547 386.656 0.000945257 385.304 0 383.926L0 61.9554C0 61.2511 0.0977118 60.5664 0.273593 59.9012C0.33222 59.6762 0.469016 59.4708 0.547186 59.2459C0.693753 58.835 0.83055 58.4144 1.04552 58.0329C1.19208 57.7786 1.40705 57.5732 1.58293 57.3384C1.80767 57.0254 2.01286 56.7026 2.27668 56.4288C2.50142 56.2038 2.79456 56.0375 3.04861 55.8419C3.33197 55.6071 3.58602 55.3528 3.90847 55.1669L97.8192 1.04537C99.0082 0.360469 100.356 0 101.728 0C103.099 0 104.447 0.360469 105.636 1.04537L199.537 55.1669H199.557C199.869 55.3626 200.133 55.6071 200.417 55.8321C200.671 56.0277 200.954 56.2038 201.179 56.419C201.452 56.7026 201.648 57.0254 201.882 57.3384C202.048 57.5732 202.273 57.7786 202.41 58.0329C202.635 58.4242 202.762 58.835 202.918 59.2459C202.996 59.4708 203.133 59.6762 203.192 59.911C203.371 60.5776 203.463 61.2649 203.465 61.9554V263.055L281.713 217.952V115.148C281.713 114.463 281.81 113.768 281.986 113.113C282.055 112.878 282.182 112.673 282.26 112.448C282.416 112.037 282.553 111.617 282.768 111.235C282.915 110.981 283.13 110.775 283.296 110.541C283.53 110.228 283.726 109.905 283.999 109.631C284.224 109.406 284.507 109.24 284.761 109.044C285.054 108.809 285.309 108.555 285.621 108.369L379.542 54.2475C380.73 53.5616 382.078 53.2006 383.45 53.2006C384.822 53.2006 386.17 53.5616 387.359 54.2475L481.26 108.369C481.592 108.565 481.846 108.809 482.139 109.034C482.383 109.23 482.667 109.406 482.891 109.621C483.165 109.905 483.36 110.228 483.595 110.541C483.771 110.775 483.986 110.981 484.123 111.235C484.347 111.617 484.474 112.037 484.631 112.448C484.719 112.673 484.846 112.878 484.904 113.113ZM469.524 217.952V128.705L436.664 147.642L391.267 173.808V263.055L469.534 217.952H469.524ZM375.623 379.397V290.091L330.969 315.621L203.455 388.475V478.622L375.623 379.397ZM15.6534 75.5029V379.397L187.802 478.612V388.485L97.8681 337.532L97.8388 337.513L97.7997 337.493C97.4968 337.317 97.2427 337.063 96.9594 336.847C96.7151 336.652 96.4317 336.495 96.2167 336.28L96.1972 336.251C95.9432 336.006 95.7673 335.703 95.5523 335.429C95.3569 335.165 95.1224 334.94 94.966 334.666L94.9563 334.637C94.7804 334.343 94.6729 333.991 94.5459 333.659C94.4188 333.365 94.2527 333.091 94.1746 332.778C94.0769 332.407 94.0573 332.006 94.0182 331.624C93.9791 331.331 93.901 331.037 93.901 330.744V120.606L48.5139 94.4303L15.6534 75.5029ZM101.737 16.872L23.4997 61.9554L101.718 107.039L179.946 61.9456L101.718 16.872H101.737ZM142.425 298.23L187.812 272.074V75.5029L154.951 94.44L109.554 120.606V317.177L142.425 298.23ZM383.45 70.0741L305.222 115.157L383.45 160.241L461.668 115.148L383.45 70.0741ZM375.623 173.808L330.227 147.642L297.366 128.705V217.952L342.753 244.108L375.623 263.055V173.808ZM195.619 374.927L310.362 309.351L367.719 276.583L289.549 231.529L199.547 283.401L117.518 330.675L195.619 374.927Z" fill="#FF2D20"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M661.371 63V345.115H763.474V393.787H607V63H661.371ZM1047.57 393.787V173.576H1187.5V224.268H1099.09V393.811H1047.57V393.787ZM1374.22 203.347V173.576H1425.75V393.799H1374.22V364.016C1367.29 375.045 1357.45 383.712 1344.68 390.004C1331.92 396.308 1319.08 399.454 1306.15 399.454C1289.45 399.454 1274.17 396.394 1260.3 390.249C1246.79 384.36 1234.64 375.751 1224.61 364.958C1214.66 354.224 1206.81 341.728 1201.45 328.112C1195.88 313.965 1193.07 298.88 1193.17 283.675C1193.17 268.251 1195.93 253.513 1201.45 239.484C1206.77 225.777 1214.62 213.193 1224.6 202.393C1234.64 191.605 1246.79 183 1260.3 177.114C1274.17 170.969 1289.45 167.909 1306.15 167.909C1319.07 167.909 1331.92 171.055 1344.68 177.359C1357.45 183.663 1367.29 192.318 1374.22 203.347ZM1369.5 310.619C1372.67 301.995 1374.27 292.875 1374.22 283.688C1374.22 274.225 1372.63 265.252 1369.5 256.757C1366.54 248.576 1362.06 241.035 1356.27 234.538C1350.5 228.166 1343.5 223.021 1335.7 219.408C1327.67 215.638 1318.75 213.74 1308.99 213.74C1299.22 213.74 1290.39 215.638 1282.52 219.408C1274.81 223.064 1267.9 228.206 1262.19 234.538C1256.42 241.001 1252 248.551 1249.2 256.744C1246.17 265.399 1244.65 274.508 1244.7 283.675C1244.7 293.126 1246.18 302.111 1249.2 310.606C1252.18 319.126 1256.52 326.52 1262.19 332.824C1267.9 339.159 1274.81 344.302 1282.52 347.955C1290.39 351.737 1299.22 353.623 1308.99 353.623C1318.75 353.623 1327.67 351.737 1335.7 347.955C1343.51 344.346 1350.5 339.2 1356.27 332.824C1362.06 326.332 1366.54 318.795 1369.5 310.619ZM1632.33 173.576H1684.52L1599.96 393.799H1535.18L1450.61 173.576H1502.8L1567.57 342.214L1632.33 173.576ZM1796.91 167.909C1867.06 167.909 1914.91 230.07 1905.92 302.821H1734.98C1734.98 321.819 1754.17 358.544 1799.74 358.544C1838.92 358.544 1865.19 324.084 1865.2 324.06L1900.01 350.991C1868.89 384.202 1843.4 399.467 1803.49 399.467C1732.19 399.467 1683.85 354.369 1683.85 283.688C1683.85 219.751 1733.82 167.909 1796.91 167.909ZM1735.11 264.542H1858.6C1858.22 260.307 1851.52 208.819 1796.49 208.819C1741.45 208.819 1735.51 260.307 1735.11 264.542ZM1939.47 393.787V63H1991V393.787H1939.47Z" fill="#FF2D20"/>
+<path d="M1472.8 35.462C1474.96 33.432 1477.74 31.605 1481.12 29.981C1483.96 28.6277 1487.48 27.4097 1491.68 26.327C1495.87 25.109 1500.81 24.5 1506.49 24.5V42.77C1500.4 42.9053 1494.99 44.191 1490.25 46.627C1488.22 47.7097 1486.19 49.063 1484.16 50.687C1482.13 52.1757 1480.31 54.138 1478.68 56.574C1477.06 59.01 1475.71 61.9197 1474.62 65.303C1473.54 68.551 1472.93 72.3403 1472.8 76.671V126H1454.53V27.342H1472.8V35.462Z" fill="black"/>
+<path d="M1615.77 94.941C1615.77 99.6777 1614.49 104.076 1611.91 108.136C1609.34 112.196 1605.82 115.782 1601.36 118.895C1597.03 122.008 1591.89 124.444 1585.93 126.203C1580.11 127.962 1573.82 128.842 1567.05 128.842C1559.88 128.842 1553.11 127.489 1546.75 124.782C1540.39 122.075 1534.84 118.354 1530.11 113.617C1525.37 108.88 1521.65 103.332 1518.94 96.971C1516.23 90.6103 1514.88 83.8437 1514.88 76.671C1514.88 69.4983 1516.23 62.7317 1518.94 56.371C1521.65 50.0103 1525.37 44.5293 1530.11 39.928C1534.84 35.1913 1540.39 31.4697 1546.75 28.763C1553.11 26.0563 1559.88 24.703 1567.05 24.703C1574.09 24.703 1580.99 26.0563 1587.76 28.763C1594.52 31.4697 1600.41 35.3943 1605.42 40.537C1610.43 45.6797 1614.15 52.108 1616.58 59.822C1619.15 67.4007 1619.76 76.062 1618.41 85.806H1534.37C1534.37 88.242 1535.25 90.881 1537.01 93.723C1538.77 96.565 1541.07 99.2717 1543.91 101.843C1546.89 104.279 1550.34 106.377 1554.26 108.136C1558.32 109.76 1562.59 110.572 1567.05 110.572C1570.98 110.572 1574.63 110.166 1578.01 109.354C1581.53 108.542 1584.58 107.459 1587.15 106.106C1589.72 104.617 1591.75 102.926 1593.24 101.031C1594.73 99.1363 1595.47 97.1063 1595.47 94.941H1615.77ZM1599.53 67.536C1599.13 65.3707 1598.04 62.9347 1596.28 60.228C1594.52 57.386 1592.22 54.6793 1589.38 52.108C1586.54 49.5367 1583.22 47.3713 1579.43 45.612C1575.65 43.8527 1571.52 42.973 1567.05 42.973C1562.59 42.973 1558.39 43.8527 1554.47 45.612C1550.68 47.3713 1547.36 49.5367 1544.52 52.108C1541.68 54.6793 1539.38 57.386 1537.62 60.228C1535.86 62.9347 1534.77 65.3707 1534.37 67.536H1599.53Z" fill="black"/>
+<path d="M1709.72 126V116.256C1709.04 117.068 1707.76 118.151 1705.86 119.504C1704.1 120.857 1701.74 122.278 1698.76 123.767C1695.92 125.12 1692.53 126.271 1688.61 127.218C1684.82 128.301 1680.62 128.842 1676.02 128.842C1668.85 128.842 1662.08 127.489 1655.72 124.782C1649.36 122.075 1643.81 118.354 1639.08 113.617C1634.34 108.88 1630.62 103.332 1627.91 96.971C1625.21 90.6103 1623.85 83.8437 1623.85 76.671C1623.85 69.4983 1625.21 62.7317 1627.91 56.371C1630.62 50.0103 1634.34 44.4617 1639.08 39.725C1643.81 34.9883 1649.36 31.2667 1655.72 28.56C1662.08 25.8533 1668.85 24.5 1676.02 24.5C1680.62 24.5 1684.68 24.906 1688.2 25.718C1691.72 26.53 1694.83 27.545 1697.54 28.763C1700.25 29.981 1702.55 31.3343 1704.44 32.823C1706.47 34.3117 1708.23 35.7327 1709.72 37.086V27.342H1727.99V126H1709.72ZM1642.12 76.671C1642.12 80.8663 1643.07 84.994 1644.96 89.054C1646.99 93.114 1649.57 96.768 1652.68 100.016C1655.93 103.129 1659.58 105.7 1663.64 107.73C1667.7 109.625 1671.83 110.572 1676.02 110.572C1680.22 110.572 1684.35 109.625 1688.41 107.73C1692.47 105.7 1696.05 103.129 1699.16 100.016C1702.28 96.768 1704.78 93.114 1706.68 89.054C1708.71 84.994 1709.72 80.8663 1709.72 76.671C1709.72 72.4757 1708.71 68.348 1706.68 64.288C1704.78 60.228 1702.28 56.6417 1699.16 53.529C1696.05 50.281 1692.47 47.7097 1688.41 45.815C1684.35 43.785 1680.22 42.77 1676.02 42.77C1671.83 42.77 1667.7 43.785 1663.64 45.815C1659.58 47.7097 1655.93 50.281 1652.68 53.529C1649.57 56.6417 1646.99 60.228 1644.96 64.288C1643.07 68.348 1642.12 72.4757 1642.12 76.671Z" fill="black"/>
+<path d="M1836.68 85.806C1836.68 91.7607 1835.32 97.377 1832.62 102.655C1829.91 107.798 1826.25 112.331 1821.65 116.256C1817.05 120.045 1811.57 123.09 1805.21 125.391C1798.98 127.692 1792.35 128.842 1785.32 128.842C1778.14 128.842 1771.38 127.489 1765.02 124.782C1758.79 122.075 1753.31 118.354 1748.57 113.617C1743.84 108.88 1740.11 103.332 1737.41 96.971C1734.7 90.6103 1733.35 83.8437 1733.35 76.671C1733.35 69.4983 1734.7 62.7317 1737.41 56.371C1740.11 50.0103 1743.84 44.5293 1748.57 39.928C1753.31 35.1913 1758.79 31.4697 1765.02 28.763C1771.38 26.0563 1778.14 24.703 1785.32 24.703C1792.35 24.703 1798.98 25.8533 1805.21 28.154C1811.57 30.3193 1817.05 33.3643 1821.65 37.289C1826.25 41.2137 1829.91 45.815 1832.62 51.093C1835.32 56.2357 1836.68 61.7167 1836.68 67.536H1818C1818 64.1527 1817.12 60.9723 1815.36 57.995C1813.74 55.0177 1811.44 52.4463 1808.46 50.281C1805.48 47.9803 1802.03 46.221 1798.11 45.003C1794.18 43.6497 1789.92 42.973 1785.32 42.973C1780.58 42.973 1776.18 43.8527 1772.12 45.612C1768.06 47.3713 1764.47 49.8073 1761.36 52.92C1758.38 55.8973 1756.02 59.4837 1754.26 63.679C1752.5 67.739 1751.62 72.0697 1751.62 76.671C1751.62 81.4077 1752.5 85.806 1754.26 89.866C1756.02 93.926 1758.38 97.5123 1761.36 100.625C1764.47 103.738 1768.06 106.174 1772.12 107.933C1776.18 109.692 1780.58 110.572 1785.32 110.572C1789.92 110.572 1794.18 109.963 1798.11 108.745C1802.03 107.392 1805.48 105.632 1808.46 103.467C1811.44 101.166 1813.74 98.5273 1815.36 95.55C1817.12 92.5727 1818 89.3247 1818 85.806H1836.68Z" fill="black"/>
+<path d="M1862.21 126V45.612H1843.94V27.342H1862.21V5.418H1880.48V27.342H1898.75V45.612H1880.48V126H1862.21Z" fill="black"/>
+</svg>
Index: resources/css/app.css
===================================================================
--- resources/css/app.css	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ resources/css/app.css	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,3 +1,159 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+@import 'tailwindcss';
+
+@plugin 'tailwindcss-animate';
+
+@source '../views';
+@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
+
+@custom-variant dark (&:is(.dark *));
+
+@theme {
+    --font-sans:
+        'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
+
+    --radius-lg: var(--radius);
+    --radius-md: calc(var(--radius) - 2px);
+    --radius-sm: calc(var(--radius) - 4px);
+
+    --color-background: var(--background);
+    --color-foreground: var(--foreground);
+
+    --color-card: var(--card);
+    --color-card-foreground: var(--card-foreground);
+
+    --color-popover: var(--popover);
+    --color-popover-foreground: var(--popover-foreground);
+
+    --color-primary: var(--primary);
+    --color-primary-foreground: var(--primary-foreground);
+
+    --color-secondary: var(--secondary);
+    --color-secondary-foreground: var(--secondary-foreground);
+
+    --color-muted: var(--muted);
+    --color-muted-foreground: var(--muted-foreground);
+
+    --color-accent: var(--accent);
+    --color-accent-foreground: var(--accent-foreground);
+
+    --color-destructive: var(--destructive);
+    --color-destructive-foreground: var(--destructive-foreground);
+
+    --color-border: var(--border);
+    --color-input: var(--input);
+    --color-ring: var(--ring);
+
+    --color-chart-1: var(--chart-1);
+    --color-chart-2: var(--chart-2);
+    --color-chart-3: var(--chart-3);
+    --color-chart-4: var(--chart-4);
+    --color-chart-5: var(--chart-5);
+
+    --color-sidebar: var(--sidebar);
+    --color-sidebar-foreground: var(--sidebar-foreground);
+    --color-sidebar-primary: var(--sidebar-primary);
+    --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+    --color-sidebar-accent: var(--sidebar-accent);
+    --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+    --color-sidebar-border: var(--sidebar-border);
+    --color-sidebar-ring: var(--sidebar-ring);
+}
+
+/*
+  The default border color has changed to `currentColor` in Tailwind CSS v4,
+  so we've added these compatibility styles to make sure everything still
+  looks the same as it did with Tailwind CSS v3.
+
+  If we ever want to remove these styles, we need to add an explicit border
+  color utility to any element that depends on these defaults.
+*/
+@layer base {
+    *,
+    ::after,
+    ::before,
+    ::backdrop,
+    ::file-selector-button {
+        border-color: var(--color-gray-200, currentColor);
+    }
+}
+
+:root {
+    --background: oklch(1 0 0);
+    --foreground: oklch(0.145 0 0);
+    --card: oklch(1 0 0);
+    --card-foreground: oklch(0.145 0 0);
+    --popover: oklch(1 0 0);
+    --popover-foreground: oklch(0.145 0 0);
+    --primary: oklch(0.205 0 0);
+    --primary-foreground: oklch(0.985 0 0);
+    --secondary: oklch(0.97 0 0);
+    --secondary-foreground: oklch(0.205 0 0);
+    --muted: oklch(0.97 0 0);
+    --muted-foreground: oklch(0.556 0 0);
+    --accent: oklch(0.97 0 0);
+    --accent-foreground: oklch(0.205 0 0);
+    --destructive: oklch(0.577 0.245 27.325);
+    --destructive-foreground: oklch(0.577 0.245 27.325);
+    --border: oklch(0.922 0 0);
+    --input: oklch(0.922 0 0);
+    --ring: oklch(0.87 0 0);
+    --chart-1: oklch(0.646 0.222 41.116);
+    --chart-2: oklch(0.6 0.118 184.704);
+    --chart-3: oklch(0.398 0.07 227.392);
+    --chart-4: oklch(0.828 0.189 84.429);
+    --chart-5: oklch(0.769 0.188 70.08);
+    --radius: 0.625rem;
+    --sidebar: oklch(0.985 0 0);
+    --sidebar-foreground: oklch(0.145 0 0);
+    --sidebar-primary: oklch(0.205 0 0);
+    --sidebar-primary-foreground: oklch(0.985 0 0);
+    --sidebar-accent: oklch(0.97 0 0);
+    --sidebar-accent-foreground: oklch(0.205 0 0);
+    --sidebar-border: oklch(0.922 0 0);
+    --sidebar-ring: oklch(0.87 0 0);
+}
+
+.dark {
+    --background: oklch(0.145 0 0);
+    --foreground: oklch(0.985 0 0);
+    --card: oklch(0.145 0 0);
+    --card-foreground: oklch(0.985 0 0);
+    --popover: oklch(0.145 0 0);
+    --popover-foreground: oklch(0.985 0 0);
+    --primary: oklch(0.985 0 0);
+    --primary-foreground: oklch(0.205 0 0);
+    --secondary: oklch(0.269 0 0);
+    --secondary-foreground: oklch(0.985 0 0);
+    --muted: oklch(0.269 0 0);
+    --muted-foreground: oklch(0.708 0 0);
+    --accent: oklch(0.269 0 0);
+    --accent-foreground: oklch(0.985 0 0);
+    --destructive: oklch(0.396 0.141 25.723);
+    --destructive-foreground: oklch(0.637 0.237 25.331);
+    --border: oklch(0.269 0 0);
+    --input: oklch(0.269 0 0);
+    --ring: oklch(0.439 0 0);
+    --chart-1: oklch(0.488 0.243 264.376);
+    --chart-2: oklch(0.696 0.17 162.48);
+    --chart-3: oklch(0.769 0.188 70.08);
+    --chart-4: oklch(0.627 0.265 303.9);
+    --chart-5: oklch(0.645 0.246 16.439);
+    --sidebar: oklch(0.205 0 0);
+    --sidebar-foreground: oklch(0.985 0 0);
+    --sidebar-primary: oklch(0.985 0 0);
+    --sidebar-primary-foreground: oklch(0.985 0 0);
+    --sidebar-accent: oklch(0.269 0 0);
+    --sidebar-accent-foreground: oklch(0.985 0 0);
+    --sidebar-border: oklch(0.269 0 0);
+    --sidebar-ring: oklch(0.439 0 0);
+}
+
+@layer base {
+    * {
+        @apply border-border;
+    }
+
+    body {
+        @apply bg-background text-foreground;
+    }
+}
Index: sources/js/app.js
===================================================================
--- resources/js/app.js	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,7 +1,0 @@
-import './bootstrap';
-
-import Alpine from 'alpinejs';
-
-window.Alpine = Alpine;
-
-Alpine.start();
Index: resources/js/app.tsx
===================================================================
--- resources/js/app.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/app.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,24 @@
+import '../css/app.css';
+
+import { createInertiaApp } from '@inertiajs/react';
+import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
+import { createRoot } from 'react-dom/client';
+import { initializeTheme } from './hooks/use-appearance';
+
+const appName = import.meta.env.VITE_APP_NAME || 'Laravel';
+
+createInertiaApp({
+    title: (title) => `${title} - ${appName}`,
+    resolve: (name) => resolvePageComponent(`./pages/${name}.tsx`, import.meta.glob('./pages/**/*.tsx')),
+    setup({ el, App, props }) {
+        const root = createRoot(el);
+
+        root.render(<App {...props} />);
+    },
+    progress: {
+        color: '#4B5563',
+    },
+});
+
+// This will set light / dark mode on load...
+initializeTheme();
Index: sources/js/bootstrap.js
===================================================================
--- resources/js/bootstrap.js	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,4 +1,0 @@
-import axios from 'axios';
-window.axios = axios;
-
-window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
Index: resources/js/components/app-content.tsx
===================================================================
--- resources/js/components/app-content.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-content.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,18 @@
+import { SidebarInset } from '@/components/ui/sidebar';
+import * as React from 'react';
+
+interface AppContentProps extends React.ComponentProps<'main'> {
+    variant?: 'header' | 'sidebar';
+}
+
+export function AppContent({ variant = 'header', children, ...props }: AppContentProps) {
+    if (variant === 'sidebar') {
+        return <SidebarInset {...props}>{children}</SidebarInset>;
+    }
+
+    return (
+        <main className="mx-auto flex h-full w-full max-w-7xl flex-1 flex-col gap-4 rounded-xl" {...props}>
+            {children}
+        </main>
+    );
+}
Index: resources/js/components/app-header.tsx
===================================================================
--- resources/js/components/app-header.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-header.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,182 @@
+import { Breadcrumbs } from '@/components/breadcrumbs';
+import { Icon } from '@/components/icon';
+import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
+import { Button } from '@/components/ui/button';
+import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
+import { NavigationMenu, NavigationMenuItem, NavigationMenuList, navigationMenuTriggerStyle } from '@/components/ui/navigation-menu';
+import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';
+import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
+import { UserMenuContent } from '@/components/user-menu-content';
+import { useInitials } from '@/hooks/use-initials';
+import { cn } from '@/lib/utils';
+import { type BreadcrumbItem, type NavItem, type SharedData } from '@/types';
+import { Link, usePage } from '@inertiajs/react';
+import { BookOpen, Folder, LayoutGrid, Menu, Search } from 'lucide-react';
+import AppLogo from './app-logo';
+import AppLogoIcon from './app-logo-icon';
+
+const mainNavItems: NavItem[] = [
+    {
+        title: 'Dashboard',
+        href: '/dashboard',
+        icon: LayoutGrid,
+    },
+];
+
+const rightNavItems: NavItem[] = [
+    {
+        title: 'Repository',
+        href: 'https://github.com/laravel/react-starter-kit',
+        icon: Folder,
+    },
+    {
+        title: 'Documentation',
+        href: 'https://laravel.com/docs/starter-kits#react',
+        icon: BookOpen,
+    },
+];
+
+const activeItemStyles = 'text-neutral-900 dark:bg-neutral-800 dark:text-neutral-100';
+
+interface AppHeaderProps {
+    breadcrumbs?: BreadcrumbItem[];
+}
+
+export function AppHeader({ breadcrumbs = [] }: AppHeaderProps) {
+    const page = usePage<SharedData>();
+    const { auth } = page.props;
+    const getInitials = useInitials();
+    return (
+        <>
+            <div className="border-sidebar-border/80 border-b">
+                <div className="mx-auto flex h-16 items-center px-4 md:max-w-7xl">
+                    {/* Mobile Menu */}
+                    <div className="lg:hidden">
+                        <Sheet>
+                            <SheetTrigger asChild>
+                                <Button variant="ghost" size="icon" className="mr-2 h-[34px] w-[34px]">
+                                    <Menu className="h-5 w-5" />
+                                </Button>
+                            </SheetTrigger>
+                            <SheetContent side="left" className="bg-sidebar flex h-full w-64 flex-col items-stretch justify-between">
+                                <SheetTitle className="sr-only">Navigation Menu</SheetTitle>
+                                <SheetHeader className="flex justify-start text-left">
+                                    <AppLogoIcon className="h-6 w-6 fill-current text-black dark:text-white" />
+                                </SheetHeader>
+                                <div className="flex h-full flex-1 flex-col space-y-4 p-4">
+                                    <div className="flex h-full flex-col justify-between text-sm">
+                                        <div className="flex flex-col space-y-4">
+                                            {mainNavItems.map((item) => (
+                                                <Link key={item.title} href={item.href} className="flex items-center space-x-2 font-medium">
+                                                    {item.icon && <Icon iconNode={item.icon} className="h-5 w-5" />}
+                                                    <span>{item.title}</span>
+                                                </Link>
+                                            ))}
+                                        </div>
+
+                                        <div className="flex flex-col space-y-4">
+                                            {rightNavItems.map((item) => (
+                                                <a
+                                                    key={item.title}
+                                                    href={item.href}
+                                                    target="_blank"
+                                                    rel="noopener noreferrer"
+                                                    className="flex items-center space-x-2 font-medium"
+                                                >
+                                                    {item.icon && <Icon iconNode={item.icon} className="h-5 w-5" />}
+                                                    <span>{item.title}</span>
+                                                </a>
+                                            ))}
+                                        </div>
+                                    </div>
+                                </div>
+                            </SheetContent>
+                        </Sheet>
+                    </div>
+
+                    <Link href="/dashboard" prefetch className="flex items-center space-x-2">
+                        <AppLogo />
+                    </Link>
+
+                    {/* Desktop Navigation */}
+                    <div className="ml-6 hidden h-full items-center space-x-6 lg:flex">
+                        <NavigationMenu className="flex h-full items-stretch">
+                            <NavigationMenuList className="flex h-full items-stretch space-x-2">
+                                {mainNavItems.map((item, index) => (
+                                    <NavigationMenuItem key={index} className="relative flex h-full items-center">
+                                        <Link
+                                            href={item.href}
+                                            className={cn(
+                                                navigationMenuTriggerStyle(),
+                                                page.url === item.href && activeItemStyles,
+                                                'h-9 cursor-pointer px-3',
+                                            )}
+                                        >
+                                            {item.icon && <Icon iconNode={item.icon} className="mr-2 h-4 w-4" />}
+                                            {item.title}
+                                        </Link>
+                                        {page.url === item.href && (
+                                            <div className="absolute bottom-0 left-0 h-0.5 w-full translate-y-px bg-black dark:bg-white"></div>
+                                        )}
+                                    </NavigationMenuItem>
+                                ))}
+                            </NavigationMenuList>
+                        </NavigationMenu>
+                    </div>
+
+                    <div className="ml-auto flex items-center space-x-2">
+                        <div className="relative flex items-center space-x-1">
+                            <Button variant="ghost" size="icon" className="group h-9 w-9 cursor-pointer">
+                                <Search className="!size-5 opacity-80 group-hover:opacity-100" />
+                            </Button>
+                            <div className="hidden lg:flex">
+                                {rightNavItems.map((item) => (
+                                    <TooltipProvider key={item.title} delayDuration={0}>
+                                        <Tooltip>
+                                            <TooltipTrigger>
+                                                <a
+                                                    href={item.href}
+                                                    target="_blank"
+                                                    rel="noopener noreferrer"
+                                                    className="group text-accent-foreground ring-offset-background hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring ml-1 inline-flex h-9 w-9 items-center justify-center rounded-md bg-transparent p-0 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50"
+                                                >
+                                                    <span className="sr-only">{item.title}</span>
+                                                    {item.icon && <Icon iconNode={item.icon} className="size-5 opacity-80 group-hover:opacity-100" />}
+                                                </a>
+                                            </TooltipTrigger>
+                                            <TooltipContent>
+                                                <p>{item.title}</p>
+                                            </TooltipContent>
+                                        </Tooltip>
+                                    </TooltipProvider>
+                                ))}
+                            </div>
+                        </div>
+                        <DropdownMenu>
+                            <DropdownMenuTrigger asChild>
+                                <Button variant="ghost" className="size-10 rounded-full p-1">
+                                    <Avatar className="size-8 overflow-hidden rounded-full">
+                                        <AvatarImage src={auth.user.avatar} alt={auth.user.name} />
+                                        <AvatarFallback className="rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white">
+                                            {getInitials(auth.user.name)}
+                                        </AvatarFallback>
+                                    </Avatar>
+                                </Button>
+                            </DropdownMenuTrigger>
+                            <DropdownMenuContent className="w-56" align="end">
+                                <UserMenuContent user={auth.user} />
+                            </DropdownMenuContent>
+                        </DropdownMenu>
+                    </div>
+                </div>
+            </div>
+            {breadcrumbs.length > 1 && (
+                <div className="border-sidebar-border/70 flex w-full border-b">
+                    <div className="mx-auto flex h-12 w-full items-center justify-start px-4 text-neutral-500 md:max-w-7xl">
+                        <Breadcrumbs breadcrumbs={breadcrumbs} />
+                    </div>
+                </div>
+            )}
+        </>
+    );
+}
Index: resources/js/components/app-logo-icon.tsx
===================================================================
--- resources/js/components/app-logo-icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-logo-icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,13 @@
+import { SVGAttributes } from 'react';
+
+export default function AppLogoIcon(props: SVGAttributes<SVGElement>) {
+    return (
+        <svg {...props} viewBox="0 0 40 42" xmlns="http://www.w3.org/2000/svg">
+            <path
+                fillRule="evenodd"
+                clipRule="evenodd"
+                d="M17.2 5.63325L8.6 0.855469L0 5.63325V32.1434L16.2 41.1434L32.4 32.1434V23.699L40 19.4767V9.85547L31.4 5.07769L22.8 9.85547V18.2999L17.2 21.411V5.63325ZM38 18.2999L32.4 21.411V15.2545L38 12.1434V18.2999ZM36.9409 10.4439L31.4 13.5221L25.8591 10.4439L31.4 7.36561L36.9409 10.4439ZM24.8 18.2999V12.1434L30.4 15.2545V21.411L24.8 18.2999ZM23.8 20.0323L29.3409 23.1105L16.2 30.411L10.6591 27.3328L23.8 20.0323ZM7.6 27.9212L15.2 32.1434V38.2999L2 30.9666V7.92116L7.6 11.0323V27.9212ZM8.6 9.29991L3.05913 6.22165L8.6 3.14339L14.1409 6.22165L8.6 9.29991ZM30.4 24.8101L17.2 32.1434V38.2999L30.4 30.9666V24.8101ZM9.6 11.0323L15.2 7.92117V22.5221L9.6 25.6333V11.0323Z"
+            />
+        </svg>
+    );
+}
Index: resources/js/components/app-logo.tsx
===================================================================
--- resources/js/components/app-logo.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-logo.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,14 @@
+import AppLogoIcon from './app-logo-icon';
+
+export default function AppLogo() {
+    return (
+        <>
+            <div className="bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-md">
+                <AppLogoIcon className="size-5 fill-current text-white dark:text-black" />
+            </div>
+            <div className="ml-1 grid flex-1 text-left text-sm">
+                <span className="mb-0.5 truncate leading-none font-semibold">Laravel Starter Kit</span>
+            </div>
+        </>
+    );
+}
Index: resources/js/components/app-shell.tsx
===================================================================
--- resources/js/components/app-shell.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-shell.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,18 @@
+import { SidebarProvider } from '@/components/ui/sidebar';
+import { SharedData } from '@/types';
+import { usePage } from '@inertiajs/react';
+
+interface AppShellProps {
+    children: React.ReactNode;
+    variant?: 'header' | 'sidebar';
+}
+
+export function AppShell({ children, variant = 'header' }: AppShellProps) {
+    const isOpen = usePage<SharedData>().props.sidebarOpen;
+
+    if (variant === 'header') {
+        return <div className="flex min-h-screen w-full flex-col">{children}</div>;
+    }
+
+    return <SidebarProvider defaultOpen={isOpen}>{children}</SidebarProvider>;
+}
Index: resources/js/components/app-sidebar-header.tsx
===================================================================
--- resources/js/components/app-sidebar-header.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-sidebar-header.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,14 @@
+import { Breadcrumbs } from '@/components/breadcrumbs';
+import { SidebarTrigger } from '@/components/ui/sidebar';
+import { type BreadcrumbItem as BreadcrumbItemType } from '@/types';
+
+export function AppSidebarHeader({ breadcrumbs = [] }: { breadcrumbs?: BreadcrumbItemType[] }) {
+    return (
+        <header className="border-sidebar-border/50 flex h-16 shrink-0 items-center gap-2 border-b px-6 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12 md:px-4">
+            <div className="flex items-center gap-2">
+                <SidebarTrigger className="-ml-1" />
+                <Breadcrumbs breadcrumbs={breadcrumbs} />
+            </div>
+        </header>
+    );
+}
Index: resources/js/components/app-sidebar.tsx
===================================================================
--- resources/js/components/app-sidebar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/app-sidebar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,56 @@
+import { NavFooter } from '@/components/nav-footer';
+import { NavMain } from '@/components/nav-main';
+import { NavUser } from '@/components/nav-user';
+import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar';
+import { type NavItem } from '@/types';
+import { Link } from '@inertiajs/react';
+import { BookOpen, Folder, LayoutGrid } from 'lucide-react';
+import AppLogo from './app-logo';
+
+const mainNavItems: NavItem[] = [
+    {
+        title: 'Dashboard',
+        href: '/dashboard',
+        icon: LayoutGrid,
+    },
+];
+
+const footerNavItems: NavItem[] = [
+    {
+        title: 'Repository',
+        href: 'https://github.com/laravel/react-starter-kit',
+        icon: Folder,
+    },
+    {
+        title: 'Documentation',
+        href: 'https://laravel.com/docs/starter-kits#react',
+        icon: BookOpen,
+    },
+];
+
+export function AppSidebar() {
+    return (
+        <Sidebar collapsible="icon" variant="inset">
+            <SidebarHeader>
+                <SidebarMenu>
+                    <SidebarMenuItem>
+                        <SidebarMenuButton size="lg" asChild>
+                            <Link href="/dashboard" prefetch>
+                                <AppLogo />
+                            </Link>
+                        </SidebarMenuButton>
+                    </SidebarMenuItem>
+                </SidebarMenu>
+            </SidebarHeader>
+
+            <SidebarContent>
+                <NavMain items={mainNavItems} />
+            </SidebarContent>
+
+            <SidebarFooter>
+                <NavFooter items={footerNavItems} className="mt-auto" />
+                <NavUser />
+            </SidebarFooter>
+        </Sidebar>
+    );
+}
Index: resources/js/components/appearance-dropdown.tsx
===================================================================
--- resources/js/components/appearance-dropdown.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/appearance-dropdown.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,53 @@
+import { Button } from '@/components/ui/button';
+import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
+import { useAppearance } from '@/hooks/use-appearance';
+import { Monitor, Moon, Sun } from 'lucide-react';
+import { HTMLAttributes } from 'react';
+
+export default function AppearanceToggleDropdown({ className = '', ...props }: HTMLAttributes<HTMLDivElement>) {
+    const { appearance, updateAppearance } = useAppearance();
+
+    const getCurrentIcon = () => {
+        switch (appearance) {
+            case 'dark':
+                return <Moon className="h-5 w-5" />;
+            case 'light':
+                return <Sun className="h-5 w-5" />;
+            default:
+                return <Monitor className="h-5 w-5" />;
+        }
+    };
+
+    return (
+        <div className={className} {...props}>
+            <DropdownMenu>
+                <DropdownMenuTrigger asChild>
+                    <Button variant="ghost" size="icon" className="h-9 w-9 rounded-md">
+                        {getCurrentIcon()}
+                        <span className="sr-only">Toggle theme</span>
+                    </Button>
+                </DropdownMenuTrigger>
+                <DropdownMenuContent align="end">
+                    <DropdownMenuItem onClick={() => updateAppearance('light')}>
+                        <span className="flex items-center gap-2">
+                            <Sun className="h-5 w-5" />
+                            Light
+                        </span>
+                    </DropdownMenuItem>
+                    <DropdownMenuItem onClick={() => updateAppearance('dark')}>
+                        <span className="flex items-center gap-2">
+                            <Moon className="h-5 w-5" />
+                            Dark
+                        </span>
+                    </DropdownMenuItem>
+                    <DropdownMenuItem onClick={() => updateAppearance('system')}>
+                        <span className="flex items-center gap-2">
+                            <Monitor className="h-5 w-5" />
+                            System
+                        </span>
+                    </DropdownMenuItem>
+                </DropdownMenuContent>
+            </DropdownMenu>
+        </div>
+    );
+}
Index: resources/js/components/appearance-tabs.tsx
===================================================================
--- resources/js/components/appearance-tabs.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/appearance-tabs.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,34 @@
+import { Appearance, useAppearance } from '@/hooks/use-appearance';
+import { cn } from '@/lib/utils';
+import { LucideIcon, Monitor, Moon, Sun } from 'lucide-react';
+import { HTMLAttributes } from 'react';
+
+export default function AppearanceToggleTab({ className = '', ...props }: HTMLAttributes<HTMLDivElement>) {
+    const { appearance, updateAppearance } = useAppearance();
+
+    const tabs: { value: Appearance; icon: LucideIcon; label: string }[] = [
+        { value: 'light', icon: Sun, label: 'Light' },
+        { value: 'dark', icon: Moon, label: 'Dark' },
+        { value: 'system', icon: Monitor, label: 'System' },
+    ];
+
+    return (
+        <div className={cn('inline-flex gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-800', className)} {...props}>
+            {tabs.map(({ value, icon: Icon, label }) => (
+                <button
+                    key={value}
+                    onClick={() => updateAppearance(value)}
+                    className={cn(
+                        'flex items-center rounded-md px-3.5 py-1.5 transition-colors',
+                        appearance === value
+                            ? 'bg-white shadow-xs dark:bg-neutral-700 dark:text-neutral-100'
+                            : 'text-neutral-500 hover:bg-neutral-200/60 hover:text-black dark:text-neutral-400 dark:hover:bg-neutral-700/60',
+                    )}
+                >
+                    <Icon className="-ml-1 h-4 w-4" />
+                    <span className="ml-1.5 text-sm">{label}</span>
+                </button>
+            ))}
+        </div>
+    );
+}
Index: resources/js/components/breadcrumbs.tsx
===================================================================
--- resources/js/components/breadcrumbs.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/breadcrumbs.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,34 @@
+import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb';
+import { type BreadcrumbItem as BreadcrumbItemType } from '@/types';
+import { Link } from '@inertiajs/react';
+import { Fragment } from 'react';
+
+export function Breadcrumbs({ breadcrumbs }: { breadcrumbs: BreadcrumbItemType[] }) {
+    return (
+        <>
+            {breadcrumbs.length > 0 && (
+                <Breadcrumb>
+                    <BreadcrumbList>
+                        {breadcrumbs.map((item, index) => {
+                            const isLast = index === breadcrumbs.length - 1;
+                            return (
+                                <Fragment key={index}>
+                                    <BreadcrumbItem>
+                                        {isLast ? (
+                                            <BreadcrumbPage>{item.title}</BreadcrumbPage>
+                                        ) : (
+                                            <BreadcrumbLink asChild>
+                                                <Link href={item.href}>{item.title}</Link>
+                                            </BreadcrumbLink>
+                                        )}
+                                    </BreadcrumbItem>
+                                    {!isLast && <BreadcrumbSeparator />}
+                                </Fragment>
+                            );
+                        })}
+                    </BreadcrumbList>
+                </Breadcrumb>
+            )}
+        </>
+    );
+}
Index: resources/js/components/delete-user.tsx
===================================================================
--- resources/js/components/delete-user.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/delete-user.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,89 @@
+import { useForm } from '@inertiajs/react';
+import { FormEventHandler, useRef } from 'react';
+
+import InputError from '@/components/input-error';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+
+import HeadingSmall from '@/components/heading-small';
+
+import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
+
+export default function DeleteUser() {
+    const passwordInput = useRef<HTMLInputElement>(null);
+    const { data, setData, delete: destroy, processing, reset, errors, clearErrors } = useForm<Required<{ password: string }>>({ password: '' });
+
+    const deleteUser: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        destroy(route('profile.destroy'), {
+            preserveScroll: true,
+            onSuccess: () => closeModal(),
+            onError: () => passwordInput.current?.focus(),
+            onFinish: () => reset(),
+        });
+    };
+
+    const closeModal = () => {
+        clearErrors();
+        reset();
+    };
+
+    return (
+        <div className="space-y-6">
+            <HeadingSmall title="Delete account" description="Delete your account and all of its resources" />
+            <div className="space-y-4 rounded-lg border border-red-100 bg-red-50 p-4 dark:border-red-200/10 dark:bg-red-700/10">
+                <div className="relative space-y-0.5 text-red-600 dark:text-red-100">
+                    <p className="font-medium">Warning</p>
+                    <p className="text-sm">Please proceed with caution, this cannot be undone.</p>
+                </div>
+
+                <Dialog>
+                    <DialogTrigger asChild>
+                        <Button variant="destructive">Delete account</Button>
+                    </DialogTrigger>
+                    <DialogContent>
+                        <DialogTitle>Are you sure you want to delete your account?</DialogTitle>
+                        <DialogDescription>
+                            Once your account is deleted, all of its resources and data will also be permanently deleted. Please enter your password
+                            to confirm you would like to permanently delete your account.
+                        </DialogDescription>
+                        <form className="space-y-6" onSubmit={deleteUser}>
+                            <div className="grid gap-2">
+                                <Label htmlFor="password" className="sr-only">
+                                    Password
+                                </Label>
+
+                                <Input
+                                    id="password"
+                                    type="password"
+                                    name="password"
+                                    ref={passwordInput}
+                                    value={data.password}
+                                    onChange={(e) => setData('password', e.target.value)}
+                                    placeholder="Password"
+                                    autoComplete="current-password"
+                                />
+
+                                <InputError message={errors.password} />
+                            </div>
+
+                            <DialogFooter className="gap-2">
+                                <DialogClose asChild>
+                                    <Button variant="secondary" onClick={closeModal}>
+                                        Cancel
+                                    </Button>
+                                </DialogClose>
+
+                                <Button variant="destructive" disabled={processing} asChild>
+                                    <button type="submit">Delete account</button>
+                                </Button>
+                            </DialogFooter>
+                        </form>
+                    </DialogContent>
+                </Dialog>
+            </div>
+        </div>
+    );
+}
Index: resources/js/components/heading-small.tsx
===================================================================
--- resources/js/components/heading-small.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/heading-small.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,8 @@
+export default function HeadingSmall({ title, description }: { title: string; description?: string }) {
+    return (
+        <header>
+            <h3 className="mb-0.5 text-base font-medium">{title}</h3>
+            {description && <p className="text-muted-foreground text-sm">{description}</p>}
+        </header>
+    );
+}
Index: resources/js/components/heading.tsx
===================================================================
--- resources/js/components/heading.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/heading.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,8 @@
+export default function Heading({ title, description }: { title: string; description?: string }) {
+    return (
+        <div className="mb-8 space-y-0.5">
+            <h2 className="text-xl font-semibold tracking-tight">{title}</h2>
+            {description && <p className="text-muted-foreground text-sm">{description}</p>}
+        </div>
+    );
+}
Index: resources/js/components/icon.tsx
===================================================================
--- resources/js/components/icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,11 @@
+import { cn } from '@/lib/utils';
+import { type LucideProps } from 'lucide-react';
+import { type ComponentType } from 'react';
+
+interface IconProps extends Omit<LucideProps, 'ref'> {
+    iconNode: ComponentType<LucideProps>;
+}
+
+export function Icon({ iconNode: IconComponent, className, ...props }: IconProps) {
+    return <IconComponent className={cn('h-4 w-4', className)} {...props} />;
+}
Index: resources/js/components/input-error.tsx
===================================================================
--- resources/js/components/input-error.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/input-error.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,10 @@
+import { cn } from '@/lib/utils';
+import { type HTMLAttributes } from 'react';
+
+export default function InputError({ message, className = '', ...props }: HTMLAttributes<HTMLParagraphElement> & { message?: string }) {
+    return message ? (
+        <p {...props} className={cn('text-sm text-red-600 dark:text-red-400', className)}>
+            {message}
+        </p>
+    ) : null;
+}
Index: resources/js/components/nav-footer.tsx
===================================================================
--- resources/js/components/nav-footer.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/nav-footer.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,34 @@
+import { Icon } from '@/components/icon';
+import { SidebarGroup, SidebarGroupContent, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar';
+import { type NavItem } from '@/types';
+import { type ComponentPropsWithoutRef } from 'react';
+
+export function NavFooter({
+    items,
+    className,
+    ...props
+}: ComponentPropsWithoutRef<typeof SidebarGroup> & {
+    items: NavItem[];
+}) {
+    return (
+        <SidebarGroup {...props} className={`group-data-[collapsible=icon]:p-0 ${className || ''}`}>
+            <SidebarGroupContent>
+                <SidebarMenu>
+                    {items.map((item) => (
+                        <SidebarMenuItem key={item.title}>
+                            <SidebarMenuButton
+                                asChild
+                                className="text-neutral-600 hover:text-neutral-800 dark:text-neutral-300 dark:hover:text-neutral-100"
+                            >
+                                <a href={item.href} target="_blank" rel="noopener noreferrer">
+                                    {item.icon && <Icon iconNode={item.icon} className="h-5 w-5" />}
+                                    <span>{item.title}</span>
+                                </a>
+                            </SidebarMenuButton>
+                        </SidebarMenuItem>
+                    ))}
+                </SidebarMenu>
+            </SidebarGroupContent>
+        </SidebarGroup>
+    );
+}
Index: resources/js/components/nav-main.tsx
===================================================================
--- resources/js/components/nav-main.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/nav-main.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,27 @@
+import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar';
+import { type NavItem } from '@/types';
+import { Link, usePage } from '@inertiajs/react';
+
+export function NavMain({ items = [] }: { items: NavItem[] }) {
+    const page = usePage();
+    return (
+        <SidebarGroup className="px-2 py-0">
+            <SidebarGroupLabel>Platform</SidebarGroupLabel>
+            <SidebarMenu>
+                {items.map((item) => (
+                    <SidebarMenuItem key={item.title}>
+                        <SidebarMenuButton  
+                            asChild isActive={item.href === page.url}
+                            tooltip={{ children: item.title }}
+                        >
+                            <Link href={item.href} prefetch>
+                                {item.icon && <item.icon />}
+                                <span>{item.title}</span>
+                            </Link>
+                        </SidebarMenuButton>
+                    </SidebarMenuItem>
+                ))}
+            </SidebarMenu>
+        </SidebarGroup>
+    );
+}
Index: resources/js/components/nav-user.tsx
===================================================================
--- resources/js/components/nav-user.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/nav-user.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,36 @@
+import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
+import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from '@/components/ui/sidebar';
+import { UserInfo } from '@/components/user-info';
+import { UserMenuContent } from '@/components/user-menu-content';
+import { useIsMobile } from '@/hooks/use-mobile';
+import { type SharedData } from '@/types';
+import { usePage } from '@inertiajs/react';
+import { ChevronsUpDown } from 'lucide-react';
+
+export function NavUser() {
+    const { auth } = usePage<SharedData>().props;
+    const { state } = useSidebar();
+    const isMobile = useIsMobile();
+
+    return (
+        <SidebarMenu>
+            <SidebarMenuItem>
+                <DropdownMenu>
+                    <DropdownMenuTrigger asChild>
+                        <SidebarMenuButton size="lg" className="text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent group">
+                            <UserInfo user={auth.user} />
+                            <ChevronsUpDown className="ml-auto size-4" />
+                        </SidebarMenuButton>
+                    </DropdownMenuTrigger>
+                    <DropdownMenuContent
+                        className="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg"
+                        align="end"
+                        side={isMobile ? 'bottom' : state === 'collapsed' ? 'left' : 'bottom'}
+                    >
+                        <UserMenuContent user={auth.user} />
+                    </DropdownMenuContent>
+                </DropdownMenu>
+            </SidebarMenuItem>
+        </SidebarMenu>
+    );
+}
Index: resources/js/components/text-link.tsx
===================================================================
--- resources/js/components/text-link.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/text-link.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,19 @@
+import { cn } from '@/lib/utils';
+import { Link } from '@inertiajs/react';
+import { ComponentProps } from 'react';
+
+type LinkProps = ComponentProps<typeof Link>;
+
+export default function TextLink({ className = '', children, ...props }: LinkProps) {
+    return (
+        <Link
+            className={cn(
+                'text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500',
+                className,
+            )}
+            {...props}
+        >
+            {children}
+        </Link>
+    );
+}
Index: resources/js/components/ui/alert.tsx
===================================================================
--- resources/js/components/ui/alert.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/alert.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,66 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const alertVariants = cva(
+  "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
+  {
+    variants: {
+      variant: {
+        default: "bg-background text-foreground",
+        destructive:
+          "text-destructive-foreground [&>svg]:text-current *:data-[slot=alert-description]:text-destructive-foreground/80",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+    },
+  }
+)
+
+function Alert({
+  className,
+  variant,
+  ...props
+}: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>) {
+  return (
+    <div
+      data-slot="alert"
+      role="alert"
+      className={cn(alertVariants({ variant }), className)}
+      {...props}
+    />
+  )
+}
+
+function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="alert-title"
+      className={cn(
+        "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function AlertDescription({
+  className,
+  ...props
+}: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="alert-description"
+      className={cn(
+        "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Alert, AlertTitle, AlertDescription }
Index: resources/js/components/ui/avatar.tsx
===================================================================
--- resources/js/components/ui/avatar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/avatar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,51 @@
+import * as React from "react"
+import * as AvatarPrimitive from "@radix-ui/react-avatar"
+
+import { cn } from "@/lib/utils"
+
+function Avatar({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Root>) {
+  return (
+    <AvatarPrimitive.Root
+      data-slot="avatar"
+      className={cn(
+        "relative flex size-8 shrink-0 overflow-hidden rounded-full",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function AvatarImage({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Image>) {
+  return (
+    <AvatarPrimitive.Image
+      data-slot="avatar-image"
+      className={cn("aspect-square size-full", className)}
+      {...props}
+    />
+  )
+}
+
+function AvatarFallback({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
+  return (
+    <AvatarPrimitive.Fallback
+      data-slot="avatar-fallback"
+      className={cn(
+        "bg-muted flex size-full items-center justify-center rounded-full",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Avatar, AvatarImage, AvatarFallback }
Index: resources/js/components/ui/badge.tsx
===================================================================
--- resources/js/components/ui/badge.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/badge.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,46 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const badgeVariants = cva(
+  "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-auto",
+  {
+    variants: {
+      variant: {
+        default:
+          "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
+        secondary:
+          "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
+        destructive:
+          "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
+        outline:
+          "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+    },
+  }
+)
+
+function Badge({
+  className,
+  variant,
+  asChild = false,
+  ...props
+}: React.ComponentProps<"span"> &
+  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
+  const Comp = asChild ? Slot : "span"
+
+  return (
+    <Comp
+      data-slot="badge"
+      className={cn(badgeVariants({ variant }), className)}
+      {...props}
+    />
+  )
+}
+
+export { Badge, badgeVariants }
Index: resources/js/components/ui/breadcrumb.tsx
===================================================================
--- resources/js/components/ui/breadcrumb.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/breadcrumb.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,109 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { ChevronRight, MoreHorizontal } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Breadcrumb({ ...props }: React.ComponentProps<"nav">) {
+  return <nav aria-label="breadcrumb" data-slot="breadcrumb" {...props} />
+}
+
+function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">) {
+  return (
+    <ol
+      data-slot="breadcrumb-list"
+      className={cn(
+        "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">) {
+  return (
+    <li
+      data-slot="breadcrumb-item"
+      className={cn("inline-flex items-center gap-1.5", className)}
+      {...props}
+    />
+  )
+}
+
+function BreadcrumbLink({
+  asChild,
+  className,
+  ...props
+}: React.ComponentProps<"a"> & {
+  asChild?: boolean
+}) {
+  const Comp = asChild ? Slot : "a"
+
+  return (
+    <Comp
+      data-slot="breadcrumb-link"
+      className={cn("hover:text-foreground transition-colors", className)}
+      {...props}
+    />
+  )
+}
+
+function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">) {
+  return (
+    <span
+      data-slot="breadcrumb-page"
+      role="link"
+      aria-disabled="true"
+      aria-current="page"
+      className={cn("text-foreground font-normal", className)}
+      {...props}
+    />
+  )
+}
+
+function BreadcrumbSeparator({
+  children,
+  className,
+  ...props
+}: React.ComponentProps<"li">) {
+  return (
+    <li
+      data-slot="breadcrumb-separator"
+      role="presentation"
+      aria-hidden="true"
+      className={cn("[&>svg]:size-3.5", className)}
+      {...props}
+    >
+      {children ?? <ChevronRight />}
+    </li>
+  )
+}
+
+function BreadcrumbEllipsis({
+  className,
+  ...props
+}: React.ComponentProps<"span">) {
+  return (
+    <span
+      data-slot="breadcrumb-ellipsis"
+      role="presentation"
+      aria-hidden="true"
+      className={cn("flex size-9 items-center justify-center", className)}
+      {...props}
+    >
+      <MoreHorizontal className="size-4" />
+      <span className="sr-only">More</span>
+    </span>
+  )
+}
+
+export {
+  Breadcrumb,
+  BreadcrumbList,
+  BreadcrumbItem,
+  BreadcrumbLink,
+  BreadcrumbPage,
+  BreadcrumbSeparator,
+  BreadcrumbEllipsis,
+}
Index: resources/js/components/ui/button.tsx
===================================================================
--- resources/js/components/ui/button.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/button.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,58 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+  {
+    variants: {
+      variant: {
+        default:
+          "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+        destructive:
+          "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
+        outline:
+          "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
+        secondary:
+          "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+        ghost: "hover:bg-accent hover:text-accent-foreground",
+        link: "text-primary underline-offset-4 hover:underline",
+      },
+      size: {
+        default: "h-9 px-4 py-2 has-[>svg]:px-3",
+        sm: "h-8 rounded-md px-3 has-[>svg]:px-2.5",
+        lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+        icon: "size-9",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+function Button({
+  className,
+  variant,
+  size,
+  asChild = false,
+  ...props
+}: React.ComponentProps<"button"> &
+  VariantProps<typeof buttonVariants> & {
+    asChild?: boolean
+  }) {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      data-slot="button"
+      className={cn(buttonVariants({ variant, size, className }))}
+      {...props}
+    />
+  )
+}
+
+export { Button, buttonVariants }
Index: resources/js/components/ui/card.tsx
===================================================================
--- resources/js/components/ui/card.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/card.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,68 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+function Card({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card"
+      className={cn(
+        "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card-header"
+      className={cn("flex flex-col gap-1.5 px-6", className)}
+      {...props}
+    />
+  )
+}
+
+function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card-title"
+      className={cn("leading-none font-semibold", className)}
+      {...props}
+    />
+  )
+}
+
+function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card-description"
+      className={cn("text-muted-foreground text-sm", className)}
+      {...props}
+    />
+  )
+}
+
+function CardContent({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card-content"
+      className={cn("px-6", className)}
+      {...props}
+    />
+  )
+}
+
+function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="card-footer"
+      className={cn("flex items-center px-6", className)}
+      {...props}
+    />
+  )
+}
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
Index: resources/js/components/ui/checkbox.tsx
===================================================================
--- resources/js/components/ui/checkbox.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/checkbox.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,30 @@
+import * as React from "react"
+import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
+import { CheckIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Checkbox({
+  className,
+  ...props
+}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
+  return (
+    <CheckboxPrimitive.Root
+      data-slot="checkbox"
+      className={cn(
+        "peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
+        className
+      )}
+      {...props}
+    >
+      <CheckboxPrimitive.Indicator
+        data-slot="checkbox-indicator"
+        className="flex items-center justify-center text-current transition-none"
+      >
+        <CheckIcon className="size-3.5" />
+      </CheckboxPrimitive.Indicator>
+    </CheckboxPrimitive.Root>
+  )
+}
+
+export { Checkbox }
Index: resources/js/components/ui/collapsible.tsx
===================================================================
--- resources/js/components/ui/collapsible.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/collapsible.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,31 @@
+import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"
+
+function Collapsible({
+  ...props
+}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
+  return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />
+}
+
+function CollapsibleTrigger({
+  ...props
+}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
+  return (
+    <CollapsiblePrimitive.CollapsibleTrigger
+      data-slot="collapsible-trigger"
+      {...props}
+    />
+  )
+}
+
+function CollapsibleContent({
+  ...props
+}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
+  return (
+    <CollapsiblePrimitive.CollapsibleContent
+      data-slot="collapsible-content"
+      {...props}
+    />
+  )
+}
+
+export { Collapsible, CollapsibleTrigger, CollapsibleContent }
Index: resources/js/components/ui/dialog.tsx
===================================================================
--- resources/js/components/ui/dialog.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/dialog.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,133 @@
+import * as React from "react"
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { XIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Dialog({
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Root>) {
+  return <DialogPrimitive.Root data-slot="dialog" {...props} />
+}
+
+function DialogTrigger({
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
+  return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
+}
+
+function DialogPortal({
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Portal>) {
+  return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
+}
+
+function DialogClose({
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Close>) {
+  return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
+}
+
+function DialogOverlay({
+  className,
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
+  return (
+    <DialogPrimitive.Overlay
+      data-slot="dialog-overlay"
+      className={cn(
+        "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function DialogContent({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Content>) {
+  return (
+    <DialogPortal data-slot="dialog-portal">
+      <DialogOverlay />
+      <DialogPrimitive.Content
+        data-slot="dialog-content"
+        className={cn(
+          "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
+          className
+        )}
+        {...props}
+      >
+        {children}
+        <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">
+          <XIcon />
+          <span className="sr-only">Close</span>
+        </DialogPrimitive.Close>
+      </DialogPrimitive.Content>
+    </DialogPortal>
+  )
+}
+
+function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="dialog-header"
+      className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
+      {...props}
+    />
+  )
+}
+
+function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="dialog-footer"
+      className={cn(
+        "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function DialogTitle({
+  className,
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Title>) {
+  return (
+    <DialogPrimitive.Title
+      data-slot="dialog-title"
+      className={cn("text-lg leading-none font-semibold", className)}
+      {...props}
+    />
+  )
+}
+
+function DialogDescription({
+  className,
+  ...props
+}: React.ComponentProps<typeof DialogPrimitive.Description>) {
+  return (
+    <DialogPrimitive.Description
+      data-slot="dialog-description"
+      className={cn("text-muted-foreground text-sm", className)}
+      {...props}
+    />
+  )
+}
+
+export {
+  Dialog,
+  DialogClose,
+  DialogContent,
+  DialogDescription,
+  DialogFooter,
+  DialogHeader,
+  DialogOverlay,
+  DialogPortal,
+  DialogTitle,
+  DialogTrigger,
+}
Index: resources/js/components/ui/dropdown-menu.tsx
===================================================================
--- resources/js/components/ui/dropdown-menu.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/dropdown-menu.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,255 @@
+import * as React from "react"
+import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
+import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function DropdownMenu({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
+  return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
+}
+
+function DropdownMenuPortal({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
+  return (
+    <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
+  )
+}
+
+function DropdownMenuTrigger({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
+  return (
+    <DropdownMenuPrimitive.Trigger
+      data-slot="dropdown-menu-trigger"
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuContent({
+  className,
+  sideOffset = 4,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
+  return (
+    <DropdownMenuPrimitive.Portal>
+      <DropdownMenuPrimitive.Content
+        data-slot="dropdown-menu-content"
+        sideOffset={sideOffset}
+        className={cn(
+          "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md",
+          className
+        )}
+        {...props}
+      />
+    </DropdownMenuPrimitive.Portal>
+  )
+}
+
+function DropdownMenuGroup({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
+  return (
+    <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
+  )
+}
+
+function DropdownMenuItem({
+  className,
+  inset,
+  variant = "default",
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
+  inset?: boolean
+  variant?: "default" | "destructive"
+}) {
+  return (
+    <DropdownMenuPrimitive.Item
+      data-slot="dropdown-menu-item"
+      data-inset={inset}
+      data-variant={variant}
+      className={cn(
+        "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuCheckboxItem({
+  className,
+  children,
+  checked,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
+  return (
+    <DropdownMenuPrimitive.CheckboxItem
+      data-slot="dropdown-menu-checkbox-item"
+      className={cn(
+        "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
+        className
+      )}
+      checked={checked}
+      {...props}
+    >
+      <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
+        <DropdownMenuPrimitive.ItemIndicator>
+          <CheckIcon className="size-4" />
+        </DropdownMenuPrimitive.ItemIndicator>
+      </span>
+      {children}
+    </DropdownMenuPrimitive.CheckboxItem>
+  )
+}
+
+function DropdownMenuRadioGroup({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
+  return (
+    <DropdownMenuPrimitive.RadioGroup
+      data-slot="dropdown-menu-radio-group"
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuRadioItem({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
+  return (
+    <DropdownMenuPrimitive.RadioItem
+      data-slot="dropdown-menu-radio-item"
+      className={cn(
+        "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
+        className
+      )}
+      {...props}
+    >
+      <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
+        <DropdownMenuPrimitive.ItemIndicator>
+          <CircleIcon className="size-2 fill-current" />
+        </DropdownMenuPrimitive.ItemIndicator>
+      </span>
+      {children}
+    </DropdownMenuPrimitive.RadioItem>
+  )
+}
+
+function DropdownMenuLabel({
+  className,
+  inset,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
+  inset?: boolean
+}) {
+  return (
+    <DropdownMenuPrimitive.Label
+      data-slot="dropdown-menu-label"
+      data-inset={inset}
+      className={cn(
+        "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuSeparator({
+  className,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
+  return (
+    <DropdownMenuPrimitive.Separator
+      data-slot="dropdown-menu-separator"
+      className={cn("bg-border -mx-1 my-1 h-px", className)}
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuShortcut({
+  className,
+  ...props
+}: React.ComponentProps<"span">) {
+  return (
+    <span
+      data-slot="dropdown-menu-shortcut"
+      className={cn(
+        "text-muted-foreground ml-auto text-xs tracking-widest",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function DropdownMenuSub({
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
+  return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
+}
+
+function DropdownMenuSubTrigger({
+  className,
+  inset,
+  children,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
+  inset?: boolean
+}) {
+  return (
+    <DropdownMenuPrimitive.SubTrigger
+      data-slot="dropdown-menu-sub-trigger"
+      data-inset={inset}
+      className={cn(
+        "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      <ChevronRightIcon className="ml-auto size-4" />
+    </DropdownMenuPrimitive.SubTrigger>
+  )
+}
+
+function DropdownMenuSubContent({
+  className,
+  ...props
+}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
+  return (
+    <DropdownMenuPrimitive.SubContent
+      data-slot="dropdown-menu-sub-content"
+      className={cn(
+        "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export {
+  DropdownMenu,
+  DropdownMenuPortal,
+  DropdownMenuTrigger,
+  DropdownMenuContent,
+  DropdownMenuGroup,
+  DropdownMenuLabel,
+  DropdownMenuItem,
+  DropdownMenuCheckboxItem,
+  DropdownMenuRadioGroup,
+  DropdownMenuRadioItem,
+  DropdownMenuSeparator,
+  DropdownMenuShortcut,
+  DropdownMenuSub,
+  DropdownMenuSubTrigger,
+  DropdownMenuSubContent,
+}
Index: resources/js/components/ui/icon.tsx
===================================================================
--- resources/js/components/ui/icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/icon.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,14 @@
+import { LucideIcon } from 'lucide-react';
+
+interface IconProps {
+    iconNode?: LucideIcon | null;
+    className?: string;
+}
+
+export function Icon({ iconNode: IconComponent, className }: IconProps) {
+    if (!IconComponent) {
+        return null;
+    }
+
+    return <IconComponent className={className} />;
+}
Index: resources/js/components/ui/input.tsx
===================================================================
--- resources/js/components/ui/input.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/input.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,21 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+function Input({ className, type, ...props }: React.ComponentProps<"input">) {
+  return (
+    <input
+      type={type}
+      data-slot="input"
+      className={cn(
+        "border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
+        "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
+        "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Input }
Index: resources/js/components/ui/label.tsx
===================================================================
--- resources/js/components/ui/label.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/label.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,22 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+
+import { cn } from "@/lib/utils"
+
+function Label({
+  className,
+  ...props
+}: React.ComponentProps<typeof LabelPrimitive.Root>) {
+  return (
+    <LabelPrimitive.Root
+      data-slot="label"
+      className={cn(
+        "text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Label }
Index: resources/js/components/ui/navigation-menu.tsx
===================================================================
--- resources/js/components/ui/navigation-menu.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/navigation-menu.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,168 @@
+import * as React from "react"
+import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
+import { cva } from "class-variance-authority"
+import { ChevronDownIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function NavigationMenu({
+  className,
+  children,
+  viewport = true,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
+  viewport?: boolean
+}) {
+  return (
+    <NavigationMenuPrimitive.Root
+      data-slot="navigation-menu"
+      data-viewport={viewport}
+      className={cn(
+        "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      {viewport && <NavigationMenuViewport />}
+    </NavigationMenuPrimitive.Root>
+  )
+}
+
+function NavigationMenuList({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {
+  return (
+    <NavigationMenuPrimitive.List
+      data-slot="navigation-menu-list"
+      className={cn(
+        "group flex flex-1 list-none items-center justify-center gap-1",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuItem({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {
+  return (
+    <NavigationMenuPrimitive.Item
+      data-slot="navigation-menu-item"
+      className={cn("relative", className)}
+      {...props}
+    />
+  )
+}
+
+const navigationMenuTriggerStyle = cva(
+  "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[active=true]:bg-accent/50 data-[state=open]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1"
+)
+
+function NavigationMenuTrigger({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {
+  return (
+    <NavigationMenuPrimitive.Trigger
+      data-slot="navigation-menu-trigger"
+      className={cn(navigationMenuTriggerStyle(), "group", className)}
+      {...props}
+    >
+      {children}{" "}
+      <ChevronDownIcon
+        className="relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180"
+        aria-hidden="true"
+      />
+    </NavigationMenuPrimitive.Trigger>
+  )
+}
+
+function NavigationMenuContent({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {
+  return (
+    <NavigationMenuPrimitive.Content
+      data-slot="navigation-menu-content"
+      className={cn(
+        "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
+        "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuViewport({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {
+  return (
+    <div
+      className={cn(
+        "absolute top-full left-0 isolate z-50 flex justify-center"
+      )}
+    >
+      <NavigationMenuPrimitive.Viewport
+        data-slot="navigation-menu-viewport"
+        className={cn(
+          "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",
+          className
+        )}
+        {...props}
+      />
+    </div>
+  )
+}
+
+function NavigationMenuLink({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {
+  return (
+    <NavigationMenuPrimitive.Link
+      data-slot="navigation-menu-link"
+      className={cn(
+        "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuIndicator({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {
+  return (
+    <NavigationMenuPrimitive.Indicator
+      data-slot="navigation-menu-indicator"
+      className={cn(
+        "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
+        className
+      )}
+      {...props}
+    >
+      <div className="bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" />
+    </NavigationMenuPrimitive.Indicator>
+  )
+}
+
+export {
+  NavigationMenu,
+  NavigationMenuList,
+  NavigationMenuItem,
+  NavigationMenuContent,
+  NavigationMenuTrigger,
+  NavigationMenuLink,
+  NavigationMenuIndicator,
+  NavigationMenuViewport,
+  navigationMenuTriggerStyle,
+}
Index: resources/js/components/ui/placeholder-pattern.tsx
===================================================================
--- resources/js/components/ui/placeholder-pattern.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/placeholder-pattern.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,20 @@
+import { useId } from 'react';
+
+interface PlaceholderPatternProps {
+    className?: string;
+}
+
+export function PlaceholderPattern({ className }: PlaceholderPatternProps) {
+    const patternId = useId();
+
+    return (
+        <svg className={className} fill="none">
+            <defs>
+                <pattern id={patternId} x="0" y="0" width="10" height="10" patternUnits="userSpaceOnUse">
+                    <path d="M-3 13 15-5M-5 5l18-18M-1 21 17 3"></path>
+                </pattern>
+            </defs>
+            <rect stroke="none" fill={`url(#${patternId})`} width="100%" height="100%"></rect>
+        </svg>
+    );
+}
Index: resources/js/components/ui/select.tsx
===================================================================
--- resources/js/components/ui/select.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/select.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,179 @@
+import * as React from "react"
+import * as SelectPrimitive from "@radix-ui/react-select"
+import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Select({
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Root>) {
+  return <SelectPrimitive.Root data-slot="select" {...props} />
+}
+
+function SelectGroup({
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Group>) {
+  return <SelectPrimitive.Group data-slot="select-group" {...props} />
+}
+
+function SelectValue({
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Value>) {
+  return <SelectPrimitive.Value data-slot="select-value" {...props} />
+}
+
+function SelectTrigger({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Trigger>) {
+  return (
+    <SelectPrimitive.Trigger
+      data-slot="select-trigger"
+      className={cn(
+        "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&>span]:line-clamp-1",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      <SelectPrimitive.Icon asChild>
+        <ChevronDownIcon className="size-4 opacity-50" />
+      </SelectPrimitive.Icon>
+    </SelectPrimitive.Trigger>
+  )
+}
+
+function SelectContent({
+  className,
+  children,
+  position = "popper",
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Content>) {
+  return (
+    <SelectPrimitive.Portal>
+      <SelectPrimitive.Content
+        data-slot="select-content"
+        className={cn(
+          "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md",
+          position === "popper" &&
+            "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
+          className
+        )}
+        position={position}
+        {...props}
+      >
+        <SelectScrollUpButton />
+        <SelectPrimitive.Viewport
+          className={cn(
+            "p-1",
+            position === "popper" &&
+              "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
+          )}
+        >
+          {children}
+        </SelectPrimitive.Viewport>
+        <SelectScrollDownButton />
+      </SelectPrimitive.Content>
+    </SelectPrimitive.Portal>
+  )
+}
+
+function SelectLabel({
+  className,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Label>) {
+  return (
+    <SelectPrimitive.Label
+      data-slot="select-label"
+      className={cn("px-2 py-1.5 text-sm font-medium", className)}
+      {...props}
+    />
+  )
+}
+
+function SelectItem({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Item>) {
+  return (
+    <SelectPrimitive.Item
+      data-slot="select-item"
+      className={cn(
+        "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
+        className
+      )}
+      {...props}
+    >
+      <span className="absolute right-2 flex size-3.5 items-center justify-center">
+        <SelectPrimitive.ItemIndicator>
+          <CheckIcon className="size-4" />
+        </SelectPrimitive.ItemIndicator>
+      </span>
+      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
+    </SelectPrimitive.Item>
+  )
+}
+
+function SelectSeparator({
+  className,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.Separator>) {
+  return (
+    <SelectPrimitive.Separator
+      data-slot="select-separator"
+      className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
+      {...props}
+    />
+  )
+}
+
+function SelectScrollUpButton({
+  className,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
+  return (
+    <SelectPrimitive.ScrollUpButton
+      data-slot="select-scroll-up-button"
+      className={cn(
+        "flex cursor-default items-center justify-center py-1",
+        className
+      )}
+      {...props}
+    >
+      <ChevronUpIcon className="size-4" />
+    </SelectPrimitive.ScrollUpButton>
+  )
+}
+
+function SelectScrollDownButton({
+  className,
+  ...props
+}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
+  return (
+    <SelectPrimitive.ScrollDownButton
+      data-slot="select-scroll-down-button"
+      className={cn(
+        "flex cursor-default items-center justify-center py-1",
+        className
+      )}
+      {...props}
+    >
+      <ChevronDownIcon className="size-4" />
+    </SelectPrimitive.ScrollDownButton>
+  )
+}
+
+export {
+  Select,
+  SelectContent,
+  SelectGroup,
+  SelectItem,
+  SelectLabel,
+  SelectScrollDownButton,
+  SelectScrollUpButton,
+  SelectSeparator,
+  SelectTrigger,
+  SelectValue,
+}
Index: resources/js/components/ui/separator.tsx
===================================================================
--- resources/js/components/ui/separator.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/separator.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,26 @@
+import * as React from "react"
+import * as SeparatorPrimitive from "@radix-ui/react-separator"
+
+import { cn } from "@/lib/utils"
+
+function Separator({
+  className,
+  orientation = "horizontal",
+  decorative = true,
+  ...props
+}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
+  return (
+    <SeparatorPrimitive.Root
+      data-slot="separator-root"
+      decorative={decorative}
+      orientation={orientation}
+      className={cn(
+        "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Separator }
Index: resources/js/components/ui/sheet.tsx
===================================================================
--- resources/js/components/ui/sheet.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/sheet.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,137 @@
+import * as React from "react"
+import * as SheetPrimitive from "@radix-ui/react-dialog"
+import { XIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
+  return <SheetPrimitive.Root data-slot="sheet" {...props} />
+}
+
+function SheetTrigger({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {
+  return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} />
+}
+
+function SheetClose({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Close>) {
+  return <SheetPrimitive.Close data-slot="sheet-close" {...props} />
+}
+
+function SheetPortal({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Portal>) {
+  return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} />
+}
+
+function SheetOverlay({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {
+  return (
+    <SheetPrimitive.Overlay
+      data-slot="sheet-overlay"
+      className={cn(
+        "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SheetContent({
+  className,
+  children,
+  side = "right",
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Content> & {
+  side?: "top" | "right" | "bottom" | "left"
+}) {
+  return (
+    <SheetPortal>
+      <SheetOverlay />
+      <SheetPrimitive.Content
+        data-slot="sheet-content"
+        className={cn(
+          "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
+          side === "right" &&
+            "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
+          side === "left" &&
+            "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
+          side === "top" &&
+            "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
+          side === "bottom" &&
+            "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
+          className
+        )}
+        {...props}
+      >
+        {children}
+        <SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none">
+          <XIcon className="size-4" />
+          <span className="sr-only">Close</span>
+        </SheetPrimitive.Close>
+      </SheetPrimitive.Content>
+    </SheetPortal>
+  )
+}
+
+function SheetHeader({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sheet-header"
+      className={cn("flex flex-col gap-1.5 p-4", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetFooter({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sheet-footer"
+      className={cn("mt-auto flex flex-col gap-2 p-4", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetTitle({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Title>) {
+  return (
+    <SheetPrimitive.Title
+      data-slot="sheet-title"
+      className={cn("text-foreground font-semibold", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetDescription({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Description>) {
+  return (
+    <SheetPrimitive.Description
+      data-slot="sheet-description"
+      className={cn("text-muted-foreground text-sm", className)}
+      {...props}
+    />
+  )
+}
+
+export {
+  Sheet,
+  SheetTrigger,
+  SheetClose,
+  SheetContent,
+  SheetHeader,
+  SheetFooter,
+  SheetTitle,
+  SheetDescription,
+}
Index: resources/js/components/ui/sidebar.tsx
===================================================================
--- resources/js/components/ui/sidebar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/sidebar.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,721 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { VariantProps, cva } from "class-variance-authority"
+import { PanelLeftIcon } from "lucide-react"
+
+import { useIsMobile } from "@/hooks/use-mobile"
+import { cn } from "@/lib/utils"
+import { Button } from "@/components/ui/button"
+import { Input } from "@/components/ui/input"
+import { Separator } from "@/components/ui/separator"
+import {
+  Sheet,
+  SheetContent,
+  SheetDescription,
+  SheetHeader,
+  SheetTitle,
+} from "@/components/ui/sheet"
+import { Skeleton } from "@/components/ui/skeleton"
+import {
+  Tooltip,
+  TooltipContent,
+  TooltipProvider,
+  TooltipTrigger,
+} from "@/components/ui/tooltip"
+
+const SIDEBAR_COOKIE_NAME = "sidebar_state"
+const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
+const SIDEBAR_WIDTH = "16rem"
+const SIDEBAR_WIDTH_MOBILE = "18rem"
+const SIDEBAR_WIDTH_ICON = "3rem"
+const SIDEBAR_KEYBOARD_SHORTCUT = "b"
+
+type SidebarContext = {
+  state: "expanded" | "collapsed"
+  open: boolean
+  setOpen: (open: boolean) => void
+  openMobile: boolean
+  setOpenMobile: (open: boolean) => void
+  isMobile: boolean
+  toggleSidebar: () => void
+}
+
+const SidebarContext = React.createContext<SidebarContext | null>(null)
+
+function useSidebar() {
+  const context = React.useContext(SidebarContext)
+  if (!context) {
+    throw new Error("useSidebar must be used within a SidebarProvider.")
+  }
+
+  return context
+}
+
+function SidebarProvider({
+  defaultOpen = true,
+  open: openProp,
+  onOpenChange: setOpenProp,
+  className,
+  style,
+  children,
+  ...props
+}: React.ComponentProps<"div"> & {
+  defaultOpen?: boolean
+  open?: boolean
+  onOpenChange?: (open: boolean) => void
+}) {
+  const isMobile = useIsMobile()
+  const [openMobile, setOpenMobile] = React.useState(false)
+
+  // This is the internal state of the sidebar.
+  // We use openProp and setOpenProp for control from outside the component.
+  const [_open, _setOpen] = React.useState(defaultOpen)
+  const open = openProp ?? _open
+  const setOpen = React.useCallback(
+    (value: boolean | ((value: boolean) => boolean)) => {
+      const openState = typeof value === "function" ? value(open) : value
+      if (setOpenProp) {
+        setOpenProp(openState)
+      } else {
+        _setOpen(openState)
+      }
+
+      // This sets the cookie to keep the sidebar state.
+      document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
+    },
+    [setOpenProp, open]
+  )
+
+  // Helper to toggle the sidebar.
+  const toggleSidebar = React.useCallback(() => {
+    return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)
+  }, [isMobile, setOpen, setOpenMobile])
+
+  // Adds a keyboard shortcut to toggle the sidebar.
+  React.useEffect(() => {
+    const handleKeyDown = (event: KeyboardEvent) => {
+      if (
+        event.key === SIDEBAR_KEYBOARD_SHORTCUT &&
+        (event.metaKey || event.ctrlKey)
+      ) {
+        event.preventDefault()
+        toggleSidebar()
+      }
+    }
+
+    window.addEventListener("keydown", handleKeyDown)
+    return () => window.removeEventListener("keydown", handleKeyDown)
+  }, [toggleSidebar])
+
+  // We add a state so that we can do data-state="expanded" or "collapsed".
+  // This makes it easier to style the sidebar with Tailwind classes.
+  const state = open ? "expanded" : "collapsed"
+
+  const contextValue = React.useMemo<SidebarContext>(
+    () => ({
+      state,
+      open,
+      setOpen,
+      isMobile,
+      openMobile,
+      setOpenMobile,
+      toggleSidebar,
+    }),
+    [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
+  )
+
+  return (
+    <SidebarContext.Provider value={contextValue}>
+      <TooltipProvider delayDuration={0}>
+        <div
+          data-slot="sidebar-wrapper"
+          style={
+            {
+              "--sidebar-width": SIDEBAR_WIDTH,
+              "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
+              ...style,
+            } as React.CSSProperties
+          }
+          className={cn(
+            "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
+            className
+          )}
+          {...props}
+        >
+          {children}
+        </div>
+      </TooltipProvider>
+    </SidebarContext.Provider>
+  )
+}
+
+function Sidebar({
+  side = "left",
+  variant = "sidebar",
+  collapsible = "offcanvas",
+  className,
+  children,
+  ...props
+}: React.ComponentProps<"div"> & {
+  side?: "left" | "right"
+  variant?: "sidebar" | "floating" | "inset"
+  collapsible?: "offcanvas" | "icon" | "none"
+}) {
+  const { isMobile, state, openMobile, setOpenMobile } = useSidebar()
+
+  if (collapsible === "none") {
+    return (
+      <div
+        data-slot="sidebar"
+        className={cn(
+          "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
+          className
+        )}
+        {...props}
+      >
+        {children}
+      </div>
+    )
+  }
+
+  if (isMobile) {
+    return (
+      <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>
+        <SheetHeader className="sr-only">
+          <SheetTitle>Sidebar</SheetTitle>
+          <SheetDescription>Displays the mobile sidebar.</SheetDescription>
+        </SheetHeader>
+        <SheetContent
+          data-sidebar="sidebar"
+          data-slot="sidebar"
+          data-mobile="true"
+          className="bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden"
+          style={
+            {
+              "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
+            } as React.CSSProperties
+          }
+          side={side}
+        >
+          <div className="flex h-full w-full flex-col">{children}</div>
+        </SheetContent>
+      </Sheet>
+    )
+  }
+
+  return (
+    <div
+      className="group peer text-sidebar-foreground hidden md:block"
+      data-state={state}
+      data-collapsible={state === "collapsed" ? collapsible : ""}
+      data-variant={variant}
+      data-side={side}
+      data-slot="sidebar"
+    >
+      {/* This is what handles the sidebar gap on desktop */}
+      <div
+        className={cn(
+          "relative h-svh w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
+          "group-data-[collapsible=offcanvas]:w-0",
+          "group-data-[side=right]:rotate-180",
+          variant === "floating" || variant === "inset"
+            ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]"
+            : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
+        )}
+      />
+      <div
+        className={cn(
+          "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
+          side === "left"
+            ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
+            : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
+          // Adjust the padding for floating and inset variants.
+          variant === "floating" || variant === "inset"
+            ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
+            : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
+          className
+        )}
+        {...props}
+      >
+        <div
+          data-sidebar="sidebar"
+          className="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm"
+        >
+          {children}
+        </div>
+      </div>
+    </div>
+  )
+}
+
+function SidebarTrigger({
+  className,
+  onClick,
+  ...props
+}: React.ComponentProps<typeof Button>) {
+  const { toggleSidebar } = useSidebar()
+
+  return (
+    <Button
+      data-sidebar="trigger"
+      data-slot="sidebar-trigger"
+      variant="ghost"
+      size="icon"
+      className={cn("h-7 w-7", className)}
+      onClick={(event) => {
+        onClick?.(event)
+        toggleSidebar()
+      }}
+      {...props}
+    >
+      <PanelLeftIcon />
+      <span className="sr-only">Toggle Sidebar</span>
+    </Button>
+  )
+}
+
+function SidebarRail({ className, ...props }: React.ComponentProps<"button">) {
+  const { toggleSidebar } = useSidebar()
+
+  return (
+    <button
+      data-sidebar="rail"
+      data-slot="sidebar-rail"
+      aria-label="Toggle Sidebar"
+      tabIndex={-1}
+      onClick={toggleSidebar}
+      title="Toggle Sidebar"
+      className={cn(
+        "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex",
+        "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
+        "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
+        "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
+        "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
+        "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarInset({ className, ...props }: React.ComponentProps<"main">) {
+  return (
+    <main
+      data-slot="sidebar-inset"
+      className={cn(
+        "bg-background relative flex max-w-full min-h-svh flex-1 flex-col",
+        "peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-0",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarInput({
+  className,
+  ...props
+}: React.ComponentProps<typeof Input>) {
+  return (
+    <Input
+      data-slot="sidebar-input"
+      data-sidebar="input"
+      className={cn("bg-background h-8 w-full shadow-none", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarHeader({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-header"
+      data-sidebar="header"
+      className={cn("flex flex-col gap-2 p-2", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarFooter({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-footer"
+      data-sidebar="footer"
+      className={cn("flex flex-col gap-2 p-2", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarSeparator({
+  className,
+  ...props
+}: React.ComponentProps<typeof Separator>) {
+  return (
+    <Separator
+      data-slot="sidebar-separator"
+      data-sidebar="separator"
+      className={cn("bg-sidebar-border mx-2 w-auto", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarContent({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-content"
+      data-sidebar="content"
+      className={cn(
+        "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarGroup({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-group"
+      data-sidebar="group"
+      className={cn("relative flex w-full min-w-0 flex-col p-2", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarGroupLabel({
+  className,
+  asChild = false,
+  ...props
+}: React.ComponentProps<"div"> & { asChild?: boolean }) {
+  const Comp = asChild ? Slot : "div"
+
+  return (
+    <Comp
+      data-slot="sidebar-group-label"
+      data-sidebar="group-label"
+      className={cn(
+        "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
+        "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarGroupAction({
+  className,
+  asChild = false,
+  ...props
+}: React.ComponentProps<"button"> & { asChild?: boolean }) {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      data-slot="sidebar-group-action"
+      data-sidebar="group-action"
+      className={cn(
+        "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
+        // Increases the hit area of the button on mobile.
+        "after:absolute after:-inset-2 md:after:hidden",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarGroupContent({
+  className,
+  ...props
+}: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-group-content"
+      data-sidebar="group-content"
+      className={cn("w-full text-sm", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenu({ className, ...props }: React.ComponentProps<"ul">) {
+  return (
+    <ul
+      data-slot="sidebar-menu"
+      data-sidebar="menu"
+      className={cn("flex w-full min-w-0 flex-col gap-1", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenuItem({ className, ...props }: React.ComponentProps<"li">) {
+  return (
+    <li
+      data-slot="sidebar-menu-item"
+      data-sidebar="menu-item"
+      className={cn("group/menu-item relative", className)}
+      {...props}
+    />
+  )
+}
+
+const sidebarMenuButtonVariants = cva(
+  "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
+  {
+    variants: {
+      variant: {
+        default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
+        outline:
+          "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
+      },
+      size: {
+        default: "h-8 text-sm",
+        sm: "h-7 text-xs",
+        lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+function SidebarMenuButton({
+  asChild = false,
+  isActive = false,
+  variant = "default",
+  size = "default",
+  tooltip,
+  className,
+  ...props
+}: React.ComponentProps<"button"> & {
+  asChild?: boolean
+  isActive?: boolean
+  tooltip?: string | React.ComponentProps<typeof TooltipContent>
+} & VariantProps<typeof sidebarMenuButtonVariants>) {
+  const Comp = asChild ? Slot : "button"
+  const { isMobile, state } = useSidebar()
+
+  const button = (
+    <Comp
+      data-slot="sidebar-menu-button"
+      data-sidebar="menu-button"
+      data-size={size}
+      data-active={isActive}
+      className={cn(sidebarMenuButtonVariants({ variant, size }), className)}
+      {...props}
+    />
+  )
+
+  if (!tooltip) {
+    return button
+  }
+
+  if (typeof tooltip === "string") {
+    tooltip = {
+      children: tooltip,
+    }
+  }
+
+  return (
+    <Tooltip>
+      <TooltipTrigger asChild>{button}</TooltipTrigger>
+      <TooltipContent
+        side="right"
+        align="center"
+        hidden={state !== "collapsed" || isMobile}
+        {...tooltip}
+      />
+    </Tooltip>
+  )
+}
+
+function SidebarMenuAction({
+  className,
+  asChild = false,
+  showOnHover = false,
+  ...props
+}: React.ComponentProps<"button"> & {
+  asChild?: boolean
+  showOnHover?: boolean
+}) {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      data-slot="sidebar-menu-action"
+      data-sidebar="menu-action"
+      className={cn(
+        "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
+        // Increases the hit area of the button on mobile.
+        "after:absolute after:-inset-2 md:after:hidden",
+        "peer-data-[size=sm]/menu-button:top-1",
+        "peer-data-[size=default]/menu-button:top-1.5",
+        "peer-data-[size=lg]/menu-button:top-2.5",
+        "group-data-[collapsible=icon]:hidden",
+        showOnHover &&
+          "peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenuBadge({
+  className,
+  ...props
+}: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sidebar-menu-badge"
+      data-sidebar="menu-badge"
+      className={cn(
+        "text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none",
+        "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
+        "peer-data-[size=sm]/menu-button:top-1",
+        "peer-data-[size=default]/menu-button:top-1.5",
+        "peer-data-[size=lg]/menu-button:top-2.5",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenuSkeleton({
+  className,
+  showIcon = false,
+  ...props
+}: React.ComponentProps<"div"> & {
+  showIcon?: boolean
+}) {
+  // Random width between 50 to 90%.
+  const width = React.useMemo(() => {
+    return `${Math.floor(Math.random() * 40) + 50}%`
+  }, [])
+
+  return (
+    <div
+      data-slot="sidebar-menu-skeleton"
+      data-sidebar="menu-skeleton"
+      className={cn("flex h-8 items-center gap-2 rounded-md px-2", className)}
+      {...props}
+    >
+      {showIcon && (
+        <Skeleton
+          className="size-4 rounded-md"
+          data-sidebar="menu-skeleton-icon"
+        />
+      )}
+      <Skeleton
+        className="h-4 max-w-(--skeleton-width) flex-1"
+        data-sidebar="menu-skeleton-text"
+        style={
+          {
+            "--skeleton-width": width,
+          } as React.CSSProperties
+        }
+      />
+    </div>
+  )
+}
+
+function SidebarMenuSub({ className, ...props }: React.ComponentProps<"ul">) {
+  return (
+    <ul
+      data-slot="sidebar-menu-sub"
+      data-sidebar="menu-sub"
+      className={cn(
+        "border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenuSubItem({
+  className,
+  ...props
+}: React.ComponentProps<"li">) {
+  return (
+    <li
+      data-slot="sidebar-menu-sub-item"
+      data-sidebar="menu-sub-item"
+      className={cn("group/menu-sub-item relative", className)}
+      {...props}
+    />
+  )
+}
+
+function SidebarMenuSubButton({
+  asChild = false,
+  size = "md",
+  isActive = false,
+  className,
+  ...props
+}: React.ComponentProps<"a"> & {
+  asChild?: boolean
+  size?: "sm" | "md"
+  isActive?: boolean
+}) {
+  const Comp = asChild ? Slot : "a"
+
+  return (
+    <Comp
+      data-slot="sidebar-menu-sub-button"
+      data-sidebar="menu-sub-button"
+      data-size={size}
+      data-active={isActive}
+      className={cn(
+        "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
+        "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
+        size === "sm" && "text-xs",
+        size === "md" && "text-sm",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export {
+  Sidebar,
+  SidebarContent,
+  SidebarFooter,
+  SidebarGroup,
+  SidebarGroupAction,
+  SidebarGroupContent,
+  SidebarGroupLabel,
+  SidebarHeader,
+  SidebarInput,
+  SidebarInset,
+  SidebarMenu,
+  SidebarMenuAction,
+  SidebarMenuBadge,
+  SidebarMenuButton,
+  SidebarMenuItem,
+  SidebarMenuSkeleton,
+  SidebarMenuSub,
+  SidebarMenuSubButton,
+  SidebarMenuSubItem,
+  SidebarProvider,
+  SidebarRail,
+  SidebarSeparator,
+  SidebarTrigger,
+  useSidebar,
+}
Index: resources/js/components/ui/skeleton.tsx
===================================================================
--- resources/js/components/ui/skeleton.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/skeleton.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,13 @@
+import { cn } from "@/lib/utils"
+
+function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="skeleton"
+      className={cn("bg-primary/10 animate-pulse rounded-md", className)}
+      {...props}
+    />
+  )
+}
+
+export { Skeleton }
Index: resources/js/components/ui/toggle-group.tsx
===================================================================
--- resources/js/components/ui/toggle-group.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/toggle-group.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,71 @@
+import * as React from "react"
+import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"
+import { type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+import { toggleVariants } from "@/components/ui/toggle"
+
+const ToggleGroupContext = React.createContext<
+  VariantProps<typeof toggleVariants>
+>({
+  size: "default",
+  variant: "default",
+})
+
+function ToggleGroup({
+  className,
+  variant,
+  size,
+  children,
+  ...props
+}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &
+  VariantProps<typeof toggleVariants>) {
+  return (
+    <ToggleGroupPrimitive.Root
+      data-slot="toggle-group"
+      data-variant={variant}
+      data-size={size}
+      className={cn(
+        "group/toggle-group flex items-center rounded-md data-[variant=outline]:shadow-xs",
+        className
+      )}
+      {...props}
+    >
+      <ToggleGroupContext.Provider value={{ variant, size }}>
+        {children}
+      </ToggleGroupContext.Provider>
+    </ToggleGroupPrimitive.Root>
+  )
+}
+
+function ToggleGroupItem({
+  className,
+  children,
+  variant,
+  size,
+  ...props
+}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &
+  VariantProps<typeof toggleVariants>) {
+  const context = React.useContext(ToggleGroupContext)
+
+  return (
+    <ToggleGroupPrimitive.Item
+      data-slot="toggle-group-item"
+      data-variant={context.variant || variant}
+      data-size={context.size || size}
+      className={cn(
+        toggleVariants({
+          variant: context.variant || variant,
+          size: context.size || size,
+        }),
+        "min-w-0 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",
+        className
+      )}
+      {...props}
+    >
+      {children}
+    </ToggleGroupPrimitive.Item>
+  )
+}
+
+export { ToggleGroup, ToggleGroupItem }
Index: resources/js/components/ui/toggle.tsx
===================================================================
--- resources/js/components/ui/toggle.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/toggle.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,45 @@
+import * as React from "react"
+import * as TogglePrimitive from "@radix-ui/react-toggle"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const toggleVariants = cva(
+  "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+  {
+    variants: {
+      variant: {
+        default: "bg-transparent",
+        outline:
+          "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground",
+      },
+      size: {
+        default: "h-9 px-2 min-w-9",
+        sm: "h-8 px-1.5 min-w-8",
+        lg: "h-10 px-2.5 min-w-10",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+function Toggle({
+  className,
+  variant,
+  size,
+  ...props
+}: React.ComponentProps<typeof TogglePrimitive.Root> &
+  VariantProps<typeof toggleVariants>) {
+  return (
+    <TogglePrimitive.Root
+      data-slot="toggle"
+      className={cn(toggleVariants({ variant, size, className }))}
+      {...props}
+    />
+  )
+}
+
+export { Toggle, toggleVariants }
Index: resources/js/components/ui/tooltip.tsx
===================================================================
--- resources/js/components/ui/tooltip.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/ui/tooltip.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,59 @@
+import * as React from "react"
+import * as TooltipPrimitive from "@radix-ui/react-tooltip"
+
+import { cn } from "@/lib/utils"
+
+function TooltipProvider({
+  delayDuration = 0,
+  ...props
+}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
+  return (
+    <TooltipPrimitive.Provider
+      data-slot="tooltip-provider"
+      delayDuration={delayDuration}
+      {...props}
+    />
+  )
+}
+
+function Tooltip({
+  ...props
+}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
+  return (
+    <TooltipProvider>
+      <TooltipPrimitive.Root data-slot="tooltip" {...props} />
+    </TooltipProvider>
+  )
+}
+
+function TooltipTrigger({
+  ...props
+}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
+  return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
+}
+
+function TooltipContent({
+  className,
+  sideOffset = 4,
+  children,
+  ...props
+}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
+  return (
+    <TooltipPrimitive.Portal>
+      <TooltipPrimitive.Content
+        data-slot="tooltip-content"
+        sideOffset={sideOffset}
+        className={cn(
+          "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-w-sm rounded-md px-3 py-1.5 text-xs",
+          className
+        )}
+        {...props}
+      >
+        {children}
+        <TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
+      </TooltipPrimitive.Content>
+    </TooltipPrimitive.Portal>
+  )
+}
+
+export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
Index: resources/js/components/user-info.tsx
===================================================================
--- resources/js/components/user-info.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/user-info.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,22 @@
+import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
+import { useInitials } from '@/hooks/use-initials';
+import { type User } from '@/types';
+
+export function UserInfo({ user, showEmail = false }: { user: User; showEmail?: boolean }) {
+    const getInitials = useInitials();
+
+    return (
+        <>
+            <Avatar className="h-8 w-8 overflow-hidden rounded-full">
+                <AvatarImage src={user.avatar} alt={user.name} />
+                <AvatarFallback className="rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white">
+                    {getInitials(user.name)}
+                </AvatarFallback>
+            </Avatar>
+            <div className="grid flex-1 text-left text-sm leading-tight">
+                <span className="truncate font-medium">{user.name}</span>
+                {showEmail && <span className="text-muted-foreground truncate text-xs">{user.email}</span>}
+            </div>
+        </>
+    );
+}
Index: resources/js/components/user-menu-content.tsx
===================================================================
--- resources/js/components/user-menu-content.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/components/user-menu-content.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,45 @@
+import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from '@/components/ui/dropdown-menu';
+import { UserInfo } from '@/components/user-info';
+import { useMobileNavigation } from '@/hooks/use-mobile-navigation';
+import { type User } from '@/types';
+import { Link, router } from '@inertiajs/react';
+import { LogOut, Settings } from 'lucide-react';
+
+interface UserMenuContentProps {
+    user: User;
+}
+
+export function UserMenuContent({ user }: UserMenuContentProps) {
+    const cleanup = useMobileNavigation();
+
+    const handleLogout = () => {
+        cleanup();
+        router.flushAll();
+    };
+
+    return (
+        <>
+            <DropdownMenuLabel className="p-0 font-normal">
+                <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
+                    <UserInfo user={user} showEmail={true} />
+                </div>
+            </DropdownMenuLabel>
+            <DropdownMenuSeparator />
+            <DropdownMenuGroup>
+                <DropdownMenuItem asChild>
+                    <Link className="block w-full" href={route('profile.edit')} as="button" prefetch onClick={cleanup}>
+                        <Settings className="mr-2" />
+                        Settings
+                    </Link>
+                </DropdownMenuItem>
+            </DropdownMenuGroup>
+            <DropdownMenuSeparator />
+            <DropdownMenuItem asChild>
+                <Link className="block w-full" method="post" href={route('logout')} as="button" onClick={handleLogout}>
+                    <LogOut className="mr-2" />
+                    Log out
+                </Link>
+            </DropdownMenuItem>
+        </>
+    );
+}
Index: resources/js/hooks/use-appearance.tsx
===================================================================
--- resources/js/hooks/use-appearance.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/hooks/use-appearance.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,73 @@
+import { useCallback, useEffect, useState } from 'react';
+
+export type Appearance = 'light' | 'dark' | 'system';
+
+const prefersDark = () => {
+    if (typeof window === 'undefined') {
+        return false;
+    }
+
+    return window.matchMedia('(prefers-color-scheme: dark)').matches;
+};
+
+const setCookie = (name: string, value: string, days = 365) => {
+    if (typeof document === 'undefined') {
+        return;
+    }
+
+    const maxAge = days * 24 * 60 * 60;
+    document.cookie = `${name}=${value};path=/;max-age=${maxAge};SameSite=Lax`;
+};
+
+const applyTheme = (appearance: Appearance) => {
+    const isDark = appearance === 'dark' || (appearance === 'system' && prefersDark());
+
+    document.documentElement.classList.toggle('dark', isDark);
+};
+
+const mediaQuery = () => {
+    if (typeof window === 'undefined') {
+        return null;
+    }
+
+    return window.matchMedia('(prefers-color-scheme: dark)');
+};
+
+const handleSystemThemeChange = () => {
+    const currentAppearance = localStorage.getItem('appearance') as Appearance;
+    applyTheme(currentAppearance || 'system');
+};
+
+export function initializeTheme() {
+    const savedAppearance = (localStorage.getItem('appearance') as Appearance) || 'system';
+
+    applyTheme(savedAppearance);
+
+    // Add the event listener for system theme changes...
+    mediaQuery()?.addEventListener('change', handleSystemThemeChange);
+}
+
+export function useAppearance() {
+    const [appearance, setAppearance] = useState<Appearance>('system');
+
+    const updateAppearance = useCallback((mode: Appearance) => {
+        setAppearance(mode);
+
+        // Store in localStorage for client-side persistence...
+        localStorage.setItem('appearance', mode);
+
+        // Store in cookie for SSR...
+        setCookie('appearance', mode);
+
+        applyTheme(mode);
+    }, []);
+
+    useEffect(() => {
+        const savedAppearance = localStorage.getItem('appearance') as Appearance | null;
+        updateAppearance(savedAppearance || 'system');
+
+        return () => mediaQuery()?.removeEventListener('change', handleSystemThemeChange);
+    }, [updateAppearance]);
+
+    return { appearance, updateAppearance } as const;
+}
Index: resources/js/hooks/use-initials.tsx
===================================================================
--- resources/js/hooks/use-initials.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/hooks/use-initials.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,15 @@
+import { useCallback } from 'react';
+
+export function useInitials() {
+    return useCallback((fullName: string): string => {
+        const names = fullName.trim().split(' ');
+
+        if (names.length === 0) return '';
+        if (names.length === 1) return names[0].charAt(0).toUpperCase();
+
+        const firstInitial = names[0].charAt(0);
+        const lastInitial = names[names.length - 1].charAt(0);
+
+        return `${firstInitial}${lastInitial}`.toUpperCase();
+    }, []);
+}
Index: resources/js/hooks/use-mobile-navigation.ts
===================================================================
--- resources/js/hooks/use-mobile-navigation.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/hooks/use-mobile-navigation.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,8 @@
+import { useCallback } from 'react';
+
+export function useMobileNavigation() {
+    return useCallback(() => {
+        // Remove pointer-events style from body...
+        document.body.style.removeProperty('pointer-events');
+    }, []);
+}
Index: resources/js/hooks/use-mobile.tsx
===================================================================
--- resources/js/hooks/use-mobile.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/hooks/use-mobile.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,22 @@
+import { useEffect, useState } from 'react';
+
+const MOBILE_BREAKPOINT = 768;
+
+export function useIsMobile() {
+    const [isMobile, setIsMobile] = useState<boolean>();
+
+    useEffect(() => {
+        const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
+
+        const onChange = () => {
+            setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
+        };
+
+        mql.addEventListener('change', onChange);
+        setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
+
+        return () => mql.removeEventListener('change', onChange);
+    }, []);
+
+    return !!isMobile;
+}
Index: resources/js/layouts/app-layout.tsx
===================================================================
--- resources/js/layouts/app-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/app-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,14 @@
+import AppLayoutTemplate from '@/layouts/app/app-sidebar-layout';
+import { type BreadcrumbItem } from '@/types';
+import { type ReactNode } from 'react';
+
+interface AppLayoutProps {
+    children: ReactNode;
+    breadcrumbs?: BreadcrumbItem[];
+}
+
+export default ({ children, breadcrumbs, ...props }: AppLayoutProps) => (
+    <AppLayoutTemplate breadcrumbs={breadcrumbs} {...props}>
+        {children}
+    </AppLayoutTemplate>
+);
Index: resources/js/layouts/app/app-header-layout.tsx
===================================================================
--- resources/js/layouts/app/app-header-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/app/app-header-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,14 @@
+import { AppContent } from '@/components/app-content';
+import { AppHeader } from '@/components/app-header';
+import { AppShell } from '@/components/app-shell';
+import { type BreadcrumbItem } from '@/types';
+import type { PropsWithChildren } from 'react';
+
+export default function AppHeaderLayout({ children, breadcrumbs }: PropsWithChildren<{ breadcrumbs?: BreadcrumbItem[] }>) {
+    return (
+        <AppShell>
+            <AppHeader breadcrumbs={breadcrumbs} />
+            <AppContent>{children}</AppContent>
+        </AppShell>
+    );
+}
Index: resources/js/layouts/app/app-sidebar-layout.tsx
===================================================================
--- resources/js/layouts/app/app-sidebar-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/app/app-sidebar-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,18 @@
+import { AppContent } from '@/components/app-content';
+import { AppShell } from '@/components/app-shell';
+import { AppSidebar } from '@/components/app-sidebar';
+import { AppSidebarHeader } from '@/components/app-sidebar-header';
+import { type BreadcrumbItem } from '@/types';
+import { type PropsWithChildren } from 'react';
+
+export default function AppSidebarLayout({ children, breadcrumbs = [] }: PropsWithChildren<{ breadcrumbs?: BreadcrumbItem[] }>) {
+    return (
+        <AppShell variant="sidebar">
+            <AppSidebar />
+            <AppContent variant="sidebar">
+                <AppSidebarHeader breadcrumbs={breadcrumbs} />
+                {children}
+            </AppContent>
+        </AppShell>
+    );
+}
Index: resources/js/layouts/auth-layout.tsx
===================================================================
--- resources/js/layouts/auth-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/auth-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,9 @@
+import AuthLayoutTemplate from '@/layouts/auth/auth-simple-layout';
+
+export default function AuthLayout({ children, title, description, ...props }: { children: React.ReactNode; title: string; description: string }) {
+    return (
+        <AuthLayoutTemplate title={title} description={description} {...props}>
+            {children}
+        </AuthLayoutTemplate>
+    );
+}
Index: resources/js/layouts/auth/auth-card-layout.tsx
===================================================================
--- resources/js/layouts/auth/auth-card-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/auth/auth-card-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,36 @@
+import AppLogoIcon from '@/components/app-logo-icon';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Link } from '@inertiajs/react';
+import { type PropsWithChildren } from 'react';
+
+export default function AuthCardLayout({
+    children,
+    title,
+    description,
+}: PropsWithChildren<{
+    name?: string;
+    title?: string;
+    description?: string;
+}>) {
+    return (
+        <div className="bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10">
+            <div className="flex w-full max-w-md flex-col gap-6">
+                <Link href={route('home')} className="flex items-center gap-2 self-center font-medium">
+                    <div className="flex h-9 w-9 items-center justify-center">
+                        <AppLogoIcon className="size-9 fill-current text-black dark:text-white" />
+                    </div>
+                </Link>
+
+                <div className="flex flex-col gap-6">
+                    <Card className="rounded-xl">
+                        <CardHeader className="px-10 pt-8 pb-0 text-center">
+                            <CardTitle className="text-xl">{title}</CardTitle>
+                            <CardDescription>{description}</CardDescription>
+                        </CardHeader>
+                        <CardContent className="px-10 py-8">{children}</CardContent>
+                    </Card>
+                </div>
+            </div>
+        </div>
+    );
+}
Index: resources/js/layouts/auth/auth-simple-layout.tsx
===================================================================
--- resources/js/layouts/auth/auth-simple-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/auth/auth-simple-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,34 @@
+import AppLogoIcon from '@/components/app-logo-icon';
+import { Link } from '@inertiajs/react';
+import { type PropsWithChildren } from 'react';
+
+interface AuthLayoutProps {
+    name?: string;
+    title?: string;
+    description?: string;
+}
+
+export default function AuthSimpleLayout({ children, title, description }: PropsWithChildren<AuthLayoutProps>) {
+    return (
+        <div className="bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10">
+            <div className="w-full max-w-sm">
+                <div className="flex flex-col gap-8">
+                    <div className="flex flex-col items-center gap-4">
+                        <Link href={route('home')} className="flex flex-col items-center gap-2 font-medium">
+                            <div className="mb-1 flex h-9 w-9 items-center justify-center rounded-md">
+                                <AppLogoIcon className="size-9 fill-current text-[var(--foreground)] dark:text-white" />
+                            </div>
+                            <span className="sr-only">{title}</span>
+                        </Link>
+
+                        <div className="space-y-2 text-center">
+                            <h1 className="text-xl font-medium">{title}</h1>
+                            <p className="text-muted-foreground text-center text-sm">{description}</p>
+                        </div>
+                    </div>
+                    {children}
+                </div>
+            </div>
+        </div>
+    );
+}
Index: resources/js/layouts/auth/auth-split-layout.tsx
===================================================================
--- resources/js/layouts/auth/auth-split-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/auth/auth-split-layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,45 @@
+import AppLogoIcon from '@/components/app-logo-icon';
+import { type SharedData } from '@/types';
+import { Link, usePage } from '@inertiajs/react';
+import { type PropsWithChildren } from 'react';
+
+interface AuthLayoutProps {
+    title?: string;
+    description?: string;
+}
+
+export default function AuthSplitLayout({ children, title, description }: PropsWithChildren<AuthLayoutProps>) {
+    const { name, quote } = usePage<SharedData>().props;
+
+    return (
+        <div className="relative grid h-dvh flex-col items-center justify-center px-8 sm:px-0 lg:max-w-none lg:grid-cols-2 lg:px-0">
+            <div className="bg-muted relative hidden h-full flex-col p-10 text-white lg:flex dark:border-r">
+                <div className="absolute inset-0 bg-zinc-900" />
+                <Link href={route('home')} className="relative z-20 flex items-center text-lg font-medium">
+                    <AppLogoIcon className="mr-2 size-8 fill-current text-white" />
+                    {name}
+                </Link>
+                {quote && (
+                    <div className="relative z-20 mt-auto">
+                        <blockquote className="space-y-2">
+                            <p className="text-lg">&ldquo;{quote.message}&rdquo;</p>
+                            <footer className="text-sm text-neutral-300">{quote.author}</footer>
+                        </blockquote>
+                    </div>
+                )}
+            </div>
+            <div className="w-full lg:p-8">
+                <div className="mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[350px]">
+                    <Link href={route('home')} className="relative z-20 flex items-center justify-center lg:hidden">
+                        <AppLogoIcon className="h-10 fill-current text-black sm:h-12" />
+                    </Link>
+                    <div className="flex flex-col items-start gap-2 text-left sm:items-center sm:text-center">
+                        <h1 className="text-xl font-medium">{title}</h1>
+                        <p className="text-muted-foreground text-sm text-balance">{description}</p>
+                    </div>
+                    {children}
+                </div>
+            </div>
+        </div>
+    );
+}
Index: resources/js/layouts/settings/layout.tsx
===================================================================
--- resources/js/layouts/settings/layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/layouts/settings/layout.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,68 @@
+import Heading from '@/components/heading';
+import { Button } from '@/components/ui/button';
+import { Separator } from '@/components/ui/separator';
+import { cn } from '@/lib/utils';
+import { type NavItem } from '@/types';
+import { Link } from '@inertiajs/react';
+import { type PropsWithChildren } from 'react';
+
+const sidebarNavItems: NavItem[] = [
+    {
+        title: 'Profile',
+        href: '/settings/profile',
+        icon: null,
+    },
+    {
+        title: 'Password',
+        href: '/settings/password',
+        icon: null,
+    },
+    {
+        title: 'Appearance',
+        href: '/settings/appearance',
+        icon: null,
+    },
+];
+
+export default function SettingsLayout({ children }: PropsWithChildren) {
+    // When server-side rendering, we only render the layout on the client...
+    if (typeof window === 'undefined') {
+        return null;
+    }
+
+    const currentPath = window.location.pathname;
+
+    return (
+        <div className="px-4 py-6">
+            <Heading title="Settings" description="Manage your profile and account settings" />
+
+            <div className="flex flex-col space-y-8 lg:flex-row lg:space-y-0 lg:space-x-12">
+                <aside className="w-full max-w-xl lg:w-48">
+                    <nav className="flex flex-col space-y-1 space-x-0">
+                        {sidebarNavItems.map((item, index) => (
+                            <Button
+                                key={`${item.href}-${index}`}
+                                size="sm"
+                                variant="ghost"
+                                asChild
+                                className={cn('w-full justify-start', {
+                                    'bg-muted': currentPath === item.href,
+                                })}
+                            >
+                                <Link href={item.href} prefetch>
+                                    {item.title}
+                                </Link>
+                            </Button>
+                        ))}
+                    </nav>
+                </aside>
+
+                <Separator className="my-6 md:hidden" />
+
+                <div className="flex-1 md:max-w-2xl">
+                    <section className="max-w-xl space-y-12">{children}</section>
+                </div>
+            </div>
+        </div>
+    );
+}
Index: resources/js/lib/utils.ts
===================================================================
--- resources/js/lib/utils.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/lib/utils.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from 'clsx';
+import { twMerge } from 'tailwind-merge';
+
+export function cn(...inputs: ClassValue[]) {
+    return twMerge(clsx(inputs));
+}
Index: resources/js/pages/auth/confirm-password.tsx
===================================================================
--- resources/js/pages/auth/confirm-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/confirm-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,60 @@
+// Components
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import InputError from '@/components/input-error';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AuthLayout from '@/layouts/auth-layout';
+
+export default function ConfirmPassword() {
+    const { data, setData, post, processing, errors, reset } = useForm<Required<{ password: string }>>({
+        password: '',
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        post(route('password.confirm'), {
+            onFinish: () => reset('password'),
+        });
+    };
+
+    return (
+        <AuthLayout
+            title="Confirm your password"
+            description="This is a secure area of the application. Please confirm your password before continuing."
+        >
+            <Head title="Confirm password" />
+
+            <form onSubmit={submit}>
+                <div className="space-y-6">
+                    <div className="grid gap-2">
+                        <Label htmlFor="password">Password</Label>
+                        <Input
+                            id="password"
+                            type="password"
+                            name="password"
+                            placeholder="Password"
+                            autoComplete="current-password"
+                            value={data.password}
+                            autoFocus
+                            onChange={(e) => setData('password', e.target.value)}
+                        />
+
+                        <InputError message={errors.password} />
+                    </div>
+
+                    <div className="flex items-center">
+                        <Button className="w-full" disabled={processing}>
+                            {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                            Confirm password
+                        </Button>
+                    </div>
+                </div>
+            </form>
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/auth/forgot-password.tsx
===================================================================
--- resources/js/pages/auth/forgot-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/forgot-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,63 @@
+// Components
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import InputError from '@/components/input-error';
+import TextLink from '@/components/text-link';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AuthLayout from '@/layouts/auth-layout';
+
+export default function ForgotPassword({ status }: { status?: string }) {
+    const { data, setData, post, processing, errors } = useForm<Required<{ email: string }>>({
+        email: '',
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        post(route('password.email'));
+    };
+
+    return (
+        <AuthLayout title="Forgot password" description="Enter your email to receive a password reset link">
+            <Head title="Forgot password" />
+
+            {status && <div className="mb-4 text-center text-sm font-medium text-green-600">{status}</div>}
+
+            <div className="space-y-6">
+                <form onSubmit={submit}>
+                    <div className="grid gap-2">
+                        <Label htmlFor="email">Email address</Label>
+                        <Input
+                            id="email"
+                            type="email"
+                            name="email"
+                            autoComplete="off"
+                            value={data.email}
+                            autoFocus
+                            onChange={(e) => setData('email', e.target.value)}
+                            placeholder="email@example.com"
+                        />
+
+                        <InputError message={errors.email} />
+                    </div>
+
+                    <div className="my-6 flex items-center justify-start">
+                        <Button className="w-full" disabled={processing}>
+                            {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                            Email password reset link
+                        </Button>
+                    </div>
+                </form>
+
+                <div className="text-muted-foreground space-x-1 text-center text-sm">
+                    <span>Or, return to</span>
+                    <TextLink href={route('login')}>log in</TextLink>
+                </div>
+            </div>
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/auth/login.tsx
===================================================================
--- resources/js/pages/auth/login.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/login.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,110 @@
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import InputError from '@/components/input-error';
+import TextLink from '@/components/text-link';
+import { Button } from '@/components/ui/button';
+import { Checkbox } from '@/components/ui/checkbox';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AuthLayout from '@/layouts/auth-layout';
+
+type LoginForm = {
+    email: string;
+    password: string;
+    remember: boolean;
+};
+
+interface LoginProps {
+    status?: string;
+    canResetPassword: boolean;
+}
+
+export default function Login({ status, canResetPassword }: LoginProps) {
+    const { data, setData, post, processing, errors, reset } = useForm<Required<LoginForm>>({
+        email: '',
+        password: '',
+        remember: false,
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+        post(route('login'), {
+            onFinish: () => reset('password'),
+        });
+    };
+
+    return (
+        <AuthLayout title="Log in to your account" description="Enter your email and password below to log in">
+            <Head title="Log in" />
+
+            <form className="flex flex-col gap-6" onSubmit={submit}>
+                <div className="grid gap-6">
+                    <div className="grid gap-2">
+                        <Label htmlFor="email">Email address</Label>
+                        <Input
+                            id="email"
+                            type="email"
+                            required
+                            autoFocus
+                            tabIndex={1}
+                            autoComplete="email"
+                            value={data.email}
+                            onChange={(e) => setData('email', e.target.value)}
+                            placeholder="email@example.com"
+                        />
+                        <InputError message={errors.email} />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <div className="flex items-center">
+                            <Label htmlFor="password">Password</Label>
+                            {canResetPassword && (
+                                <TextLink href={route('password.request')} className="ml-auto text-sm" tabIndex={5}>
+                                    Forgot password?
+                                </TextLink>
+                            )}
+                        </div>
+                        <Input
+                            id="password"
+                            type="password"
+                            required
+                            tabIndex={2}
+                            autoComplete="current-password"
+                            value={data.password}
+                            onChange={(e) => setData('password', e.target.value)}
+                            placeholder="Password"
+                        />
+                        <InputError message={errors.password} />
+                    </div>
+
+                    <div className="flex items-center space-x-3">
+                        <Checkbox
+                            id="remember"
+                            name="remember"
+                            checked={data.remember}
+                            onClick={() => setData('remember', !data.remember)}
+                            tabIndex={3}
+                        />
+                        <Label htmlFor="remember">Remember me</Label>
+                    </div>
+
+                    <Button type="submit" className="mt-4 w-full" tabIndex={4} disabled={processing}>
+                        {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                        Log in
+                    </Button>
+                </div>
+
+                <div className="text-muted-foreground text-center text-sm">
+                    Don't have an account?{' '}
+                    <TextLink href={route('register')} tabIndex={5}>
+                        Sign up
+                    </TextLink>
+                </div>
+            </form>
+
+            {status && <div className="mb-4 text-center text-sm font-medium text-green-600">{status}</div>}
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/auth/register.tsx
===================================================================
--- resources/js/pages/auth/register.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/register.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,119 @@
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import InputError from '@/components/input-error';
+import TextLink from '@/components/text-link';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AuthLayout from '@/layouts/auth-layout';
+
+type RegisterForm = {
+    name: string;
+    email: string;
+    password: string;
+    password_confirmation: string;
+};
+
+export default function Register() {
+    const { data, setData, post, processing, errors, reset } = useForm<Required<RegisterForm>>({
+        name: '',
+        email: '',
+        password: '',
+        password_confirmation: '',
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+        post(route('register'), {
+            onFinish: () => reset('password', 'password_confirmation'),
+        });
+    };
+
+    return (
+        <AuthLayout title="Create an account" description="Enter your details below to create your account">
+            <Head title="Register" />
+            <form className="flex flex-col gap-6" onSubmit={submit}>
+                <div className="grid gap-6">
+                    <div className="grid gap-2">
+                        <Label htmlFor="name">Name</Label>
+                        <Input
+                            id="name"
+                            type="text"
+                            required
+                            autoFocus
+                            tabIndex={1}
+                            autoComplete="name"
+                            value={data.name}
+                            onChange={(e) => setData('name', e.target.value)}
+                            disabled={processing}
+                            placeholder="Full name"
+                        />
+                        <InputError message={errors.name} className="mt-2" />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <Label htmlFor="email">Email address</Label>
+                        <Input
+                            id="email"
+                            type="email"
+                            required
+                            tabIndex={2}
+                            autoComplete="email"
+                            value={data.email}
+                            onChange={(e) => setData('email', e.target.value)}
+                            disabled={processing}
+                            placeholder="email@example.com"
+                        />
+                        <InputError message={errors.email} />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <Label htmlFor="password">Password</Label>
+                        <Input
+                            id="password"
+                            type="password"
+                            required
+                            tabIndex={3}
+                            autoComplete="new-password"
+                            value={data.password}
+                            onChange={(e) => setData('password', e.target.value)}
+                            disabled={processing}
+                            placeholder="Password"
+                        />
+                        <InputError message={errors.password} />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <Label htmlFor="password_confirmation">Confirm password</Label>
+                        <Input
+                            id="password_confirmation"
+                            type="password"
+                            required
+                            tabIndex={4}
+                            autoComplete="new-password"
+                            value={data.password_confirmation}
+                            onChange={(e) => setData('password_confirmation', e.target.value)}
+                            disabled={processing}
+                            placeholder="Confirm password"
+                        />
+                        <InputError message={errors.password_confirmation} />
+                    </div>
+
+                    <Button type="submit" className="mt-2 w-full" tabIndex={5} disabled={processing}>
+                        {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                        Create account
+                    </Button>
+                </div>
+
+                <div className="text-muted-foreground text-center text-sm">
+                    Already have an account?{' '}
+                    <TextLink href={route('login')} tabIndex={6}>
+                        Log in
+                    </TextLink>
+                </div>
+            </form>
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/auth/reset-password.tsx
===================================================================
--- resources/js/pages/auth/reset-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/reset-password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,98 @@
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import InputError from '@/components/input-error';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AuthLayout from '@/layouts/auth-layout';
+
+interface ResetPasswordProps {
+    token: string;
+    email: string;
+}
+
+type ResetPasswordForm = {
+    token: string;
+    email: string;
+    password: string;
+    password_confirmation: string;
+};
+
+export default function ResetPassword({ token, email }: ResetPasswordProps) {
+    const { data, setData, post, processing, errors, reset } = useForm<Required<ResetPasswordForm>>({
+        token: token,
+        email: email,
+        password: '',
+        password_confirmation: '',
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+        post(route('password.store'), {
+            onFinish: () => reset('password', 'password_confirmation'),
+        });
+    };
+
+    return (
+        <AuthLayout title="Reset password" description="Please enter your new password below">
+            <Head title="Reset password" />
+
+            <form onSubmit={submit}>
+                <div className="grid gap-6">
+                    <div className="grid gap-2">
+                        <Label htmlFor="email">Email</Label>
+                        <Input
+                            id="email"
+                            type="email"
+                            name="email"
+                            autoComplete="email"
+                            value={data.email}
+                            className="mt-1 block w-full"
+                            readOnly
+                            onChange={(e) => setData('email', e.target.value)}
+                        />
+                        <InputError message={errors.email} className="mt-2" />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <Label htmlFor="password">Password</Label>
+                        <Input
+                            id="password"
+                            type="password"
+                            name="password"
+                            autoComplete="new-password"
+                            value={data.password}
+                            className="mt-1 block w-full"
+                            autoFocus
+                            onChange={(e) => setData('password', e.target.value)}
+                            placeholder="Password"
+                        />
+                        <InputError message={errors.password} />
+                    </div>
+
+                    <div className="grid gap-2">
+                        <Label htmlFor="password_confirmation">Confirm password</Label>
+                        <Input
+                            id="password_confirmation"
+                            type="password"
+                            name="password_confirmation"
+                            autoComplete="new-password"
+                            value={data.password_confirmation}
+                            className="mt-1 block w-full"
+                            onChange={(e) => setData('password_confirmation', e.target.value)}
+                            placeholder="Confirm password"
+                        />
+                        <InputError message={errors.password_confirmation} className="mt-2" />
+                    </div>
+
+                    <Button type="submit" className="mt-4 w-full" disabled={processing}>
+                        {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                        Reset password
+                    </Button>
+                </div>
+            </form>
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/auth/verify-email.tsx
===================================================================
--- resources/js/pages/auth/verify-email.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/auth/verify-email.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,41 @@
+// Components
+import { Head, useForm } from '@inertiajs/react';
+import { LoaderCircle } from 'lucide-react';
+import { FormEventHandler } from 'react';
+
+import TextLink from '@/components/text-link';
+import { Button } from '@/components/ui/button';
+import AuthLayout from '@/layouts/auth-layout';
+
+export default function VerifyEmail({ status }: { status?: string }) {
+    const { post, processing } = useForm({});
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        post(route('verification.send'));
+    };
+
+    return (
+        <AuthLayout title="Verify email" description="Please verify your email address by clicking on the link we just emailed to you.">
+            <Head title="Email verification" />
+
+            {status === 'verification-link-sent' && (
+                <div className="mb-4 text-center text-sm font-medium text-green-600">
+                    A new verification link has been sent to the email address you provided during registration.
+                </div>
+            )}
+
+            <form onSubmit={submit} className="space-y-6 text-center">
+                <Button disabled={processing} variant="secondary">
+                    {processing && <LoaderCircle className="h-4 w-4 animate-spin" />}
+                    Resend verification email
+                </Button>
+
+                <TextLink href={route('logout')} method="post" className="mx-auto block text-sm">
+                    Log out
+                </TextLink>
+            </form>
+        </AuthLayout>
+    );
+}
Index: resources/js/pages/dashboard.tsx
===================================================================
--- resources/js/pages/dashboard.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/dashboard.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,35 @@
+import { PlaceholderPattern } from '@/components/ui/placeholder-pattern';
+import AppLayout from '@/layouts/app-layout';
+import { type BreadcrumbItem } from '@/types';
+import { Head } from '@inertiajs/react';
+
+const breadcrumbs: BreadcrumbItem[] = [
+    {
+        title: 'Dashboard',
+        href: '/dashboard',
+    },
+];
+
+export default function Dashboard() {
+    return (
+        <AppLayout breadcrumbs={breadcrumbs}>
+            <Head title="Dashboard" />
+            <div className="flex h-full flex-1 flex-col gap-4 rounded-xl p-4">
+                <div className="grid auto-rows-min gap-4 md:grid-cols-3">
+                    <div className="border-sidebar-border/70 dark:border-sidebar-border relative aspect-video overflow-hidden rounded-xl border">
+                        <PlaceholderPattern className="absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20" />
+                    </div>
+                    <div className="border-sidebar-border/70 dark:border-sidebar-border relative aspect-video overflow-hidden rounded-xl border">
+                        <PlaceholderPattern className="absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20" />
+                    </div>
+                    <div className="border-sidebar-border/70 dark:border-sidebar-border relative aspect-video overflow-hidden rounded-xl border">
+                        <PlaceholderPattern className="absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20" />
+                    </div>
+                </div>
+                <div className="border-sidebar-border/70 dark:border-sidebar-border relative min-h-[100vh] flex-1 overflow-hidden rounded-xl border md:min-h-min">
+                    <PlaceholderPattern className="absolute inset-0 size-full stroke-neutral-900/20 dark:stroke-neutral-100/20" />
+                </div>
+            </div>
+        </AppLayout>
+    );
+}
Index: resources/js/pages/settings/appearance.tsx
===================================================================
--- resources/js/pages/settings/appearance.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/settings/appearance.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,30 @@
+import { Head } from '@inertiajs/react';
+
+import AppearanceTabs from '@/components/appearance-tabs';
+import HeadingSmall from '@/components/heading-small';
+import { type BreadcrumbItem } from '@/types';
+
+import AppLayout from '@/layouts/app-layout';
+import SettingsLayout from '@/layouts/settings/layout';
+
+const breadcrumbs: BreadcrumbItem[] = [
+    {
+        title: 'Appearance settings',
+        href: '/settings/appearance',
+    },
+];
+
+export default function Appearance() {
+    return (
+        <AppLayout breadcrumbs={breadcrumbs}>
+            <Head title="Appearance settings" />
+
+            <SettingsLayout>
+                <div className="space-y-6">
+                    <HeadingSmall title="Appearance settings" description="Update your account's appearance settings" />
+                    <AppearanceTabs />
+                </div>
+            </SettingsLayout>
+        </AppLayout>
+    );
+}
Index: resources/js/pages/settings/password.tsx
===================================================================
--- resources/js/pages/settings/password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/settings/password.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,128 @@
+import InputError from '@/components/input-error';
+import AppLayout from '@/layouts/app-layout';
+import SettingsLayout from '@/layouts/settings/layout';
+import { type BreadcrumbItem } from '@/types';
+import { Transition } from '@headlessui/react';
+import { Head, useForm } from '@inertiajs/react';
+import { FormEventHandler, useRef } from 'react';
+
+import HeadingSmall from '@/components/heading-small';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+
+const breadcrumbs: BreadcrumbItem[] = [
+    {
+        title: 'Password settings',
+        href: '/settings/password',
+    },
+];
+
+export default function Password() {
+    const passwordInput = useRef<HTMLInputElement>(null);
+    const currentPasswordInput = useRef<HTMLInputElement>(null);
+
+    const { data, setData, errors, put, reset, processing, recentlySuccessful } = useForm({
+        current_password: '',
+        password: '',
+        password_confirmation: '',
+    });
+
+    const updatePassword: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        put(route('password.update'), {
+            preserveScroll: true,
+            onSuccess: () => reset(),
+            onError: (errors) => {
+                if (errors.password) {
+                    reset('password', 'password_confirmation');
+                    passwordInput.current?.focus();
+                }
+
+                if (errors.current_password) {
+                    reset('current_password');
+                    currentPasswordInput.current?.focus();
+                }
+            },
+        });
+    };
+
+    return (
+        <AppLayout breadcrumbs={breadcrumbs}>
+            <Head title="Profile settings" />
+
+            <SettingsLayout>
+                <div className="space-y-6">
+                    <HeadingSmall title="Update password" description="Ensure your account is using a long, random password to stay secure" />
+
+                    <form onSubmit={updatePassword} className="space-y-6">
+                        <div className="grid gap-2">
+                            <Label htmlFor="current_password">Current password</Label>
+
+                            <Input
+                                id="current_password"
+                                ref={currentPasswordInput}
+                                value={data.current_password}
+                                onChange={(e) => setData('current_password', e.target.value)}
+                                type="password"
+                                className="mt-1 block w-full"
+                                autoComplete="current-password"
+                                placeholder="Current password"
+                            />
+
+                            <InputError message={errors.current_password} />
+                        </div>
+
+                        <div className="grid gap-2">
+                            <Label htmlFor="password">New password</Label>
+
+                            <Input
+                                id="password"
+                                ref={passwordInput}
+                                value={data.password}
+                                onChange={(e) => setData('password', e.target.value)}
+                                type="password"
+                                className="mt-1 block w-full"
+                                autoComplete="new-password"
+                                placeholder="New password"
+                            />
+
+                            <InputError message={errors.password} />
+                        </div>
+
+                        <div className="grid gap-2">
+                            <Label htmlFor="password_confirmation">Confirm password</Label>
+
+                            <Input
+                                id="password_confirmation"
+                                value={data.password_confirmation}
+                                onChange={(e) => setData('password_confirmation', e.target.value)}
+                                type="password"
+                                className="mt-1 block w-full"
+                                autoComplete="new-password"
+                                placeholder="Confirm password"
+                            />
+
+                            <InputError message={errors.password_confirmation} />
+                        </div>
+
+                        <div className="flex items-center gap-4">
+                            <Button disabled={processing}>Save password</Button>
+
+                            <Transition
+                                show={recentlySuccessful}
+                                enter="transition ease-in-out"
+                                enterFrom="opacity-0"
+                                leave="transition ease-in-out"
+                                leaveTo="opacity-0"
+                            >
+                                <p className="text-sm text-neutral-600">Saved</p>
+                            </Transition>
+                        </div>
+                    </form>
+                </div>
+            </SettingsLayout>
+        </AppLayout>
+    );
+}
Index: resources/js/pages/settings/profile.tsx
===================================================================
--- resources/js/pages/settings/profile.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/settings/profile.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,127 @@
+import { type BreadcrumbItem, type SharedData } from '@/types';
+import { Transition } from '@headlessui/react';
+import { Head, Link, useForm, usePage } from '@inertiajs/react';
+import { FormEventHandler } from 'react';
+
+import DeleteUser from '@/components/delete-user';
+import HeadingSmall from '@/components/heading-small';
+import InputError from '@/components/input-error';
+import { Button } from '@/components/ui/button';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import AppLayout from '@/layouts/app-layout';
+import SettingsLayout from '@/layouts/settings/layout';
+
+const breadcrumbs: BreadcrumbItem[] = [
+    {
+        title: 'Profile settings',
+        href: '/settings/profile',
+    },
+];
+
+type ProfileForm = {
+    name: string;
+    email: string;
+}
+
+export default function Profile({ mustVerifyEmail, status }: { mustVerifyEmail: boolean; status?: string }) {
+    const { auth } = usePage<SharedData>().props;
+
+    const { data, setData, patch, errors, processing, recentlySuccessful } = useForm<Required<ProfileForm>>({
+        name: auth.user.name,
+        email: auth.user.email,
+    });
+
+    const submit: FormEventHandler = (e) => {
+        e.preventDefault();
+
+        patch(route('profile.update'), {
+            preserveScroll: true,
+        });
+    };
+
+    return (
+        <AppLayout breadcrumbs={breadcrumbs}>
+            <Head title="Profile settings" />
+
+            <SettingsLayout>
+                <div className="space-y-6">
+                    <HeadingSmall title="Profile information" description="Update your name and email address" />
+
+                    <form onSubmit={submit} className="space-y-6">
+                        <div className="grid gap-2">
+                            <Label htmlFor="name">Name</Label>
+
+                            <Input
+                                id="name"
+                                className="mt-1 block w-full"
+                                value={data.name}
+                                onChange={(e) => setData('name', e.target.value)}
+                                required
+                                autoComplete="name"
+                                placeholder="Full name"
+                            />
+
+                            <InputError className="mt-2" message={errors.name} />
+                        </div>
+
+                        <div className="grid gap-2">
+                            <Label htmlFor="email">Email address</Label>
+
+                            <Input
+                                id="email"
+                                type="email"
+                                className="mt-1 block w-full"
+                                value={data.email}
+                                onChange={(e) => setData('email', e.target.value)}
+                                required
+                                autoComplete="username"
+                                placeholder="Email address"
+                            />
+
+                            <InputError className="mt-2" message={errors.email} />
+                        </div>
+
+                        {mustVerifyEmail && auth.user.email_verified_at === null && (
+                            <div>
+                                <p className="text-muted-foreground -mt-4 text-sm">
+                                    Your email address is unverified.{' '}
+                                    <Link
+                                        href={route('verification.send')}
+                                        method="post"
+                                        as="button"
+                                        className="text-foreground underline decoration-neutral-300 underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-neutral-500"
+                                    >
+                                        Click here to resend the verification email.
+                                    </Link>
+                                </p>
+
+                                {status === 'verification-link-sent' && (
+                                    <div className="mt-2 text-sm font-medium text-green-600">
+                                        A new verification link has been sent to your email address.
+                                    </div>
+                                )}
+                            </div>
+                        )}
+
+                        <div className="flex items-center gap-4">
+                            <Button disabled={processing}>Save</Button>
+
+                            <Transition
+                                show={recentlySuccessful}
+                                enter="transition ease-in-out"
+                                enterFrom="opacity-0"
+                                leave="transition ease-in-out"
+                                leaveTo="opacity-0"
+                            >
+                                <p className="text-sm text-neutral-600">Saved</p>
+                            </Transition>
+                        </div>
+                    </form>
+                </div>
+
+                <DeleteUser />
+            </SettingsLayout>
+        </AppLayout>
+    );
+}
Index: resources/js/pages/welcome.tsx
===================================================================
--- resources/js/pages/welcome.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/pages/welcome.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,791 @@
+import { type SharedData } from '@/types';
+import { Head, Link, usePage } from '@inertiajs/react';
+
+export default function Welcome() {
+    const { auth } = usePage<SharedData>().props;
+
+    return (
+        <>
+            <Head title="Welcome">
+                <link rel="preconnect" href="https://fonts.bunny.net" />
+                <link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" />
+            </Head>
+            <div className="flex min-h-screen flex-col items-center bg-[#FDFDFC] p-6 text-[#1b1b18] lg:justify-center lg:p-8 dark:bg-[#0a0a0a]">
+                <header className="mb-6 w-full max-w-[335px] text-sm not-has-[nav]:hidden lg:max-w-4xl">
+                    <nav className="flex items-center justify-end gap-4">
+                        {auth.user ? (
+                            <Link
+                                href={route('dashboard')}
+                                className="inline-block rounded-sm border border-[#19140035] px-5 py-1.5 text-sm leading-normal text-[#1b1b18] hover:border-[#1915014a] dark:border-[#3E3E3A] dark:text-[#EDEDEC] dark:hover:border-[#62605b]"
+                            >
+                                Dashboard
+                            </Link>
+                        ) : (
+                            <>
+                                <Link
+                                    href={route('login')}
+                                    className="inline-block rounded-sm border border-transparent px-5 py-1.5 text-sm leading-normal text-[#1b1b18] hover:border-[#19140035] dark:text-[#EDEDEC] dark:hover:border-[#3E3E3A]"
+                                >
+                                    Log in
+                                </Link>
+                                <Link
+                                    href={route('register')}
+                                    className="inline-block rounded-sm border border-[#19140035] px-5 py-1.5 text-sm leading-normal text-[#1b1b18] hover:border-[#1915014a] dark:border-[#3E3E3A] dark:text-[#EDEDEC] dark:hover:border-[#62605b]"
+                                >
+                                    Register
+                                </Link>
+                            </>
+                        )}
+                    </nav>
+                </header>
+                <div className="flex w-full items-center justify-center opacity-100 transition-opacity duration-750 lg:grow starting:opacity-0">
+                    <main className="flex w-full max-w-[335px] flex-col-reverse lg:max-w-4xl lg:flex-row">
+                        <div className="flex-1 rounded-br-lg rounded-bl-lg bg-white p-6 pb-12 text-[13px] leading-[20px] shadow-[inset_0px_0px_0px_1px_rgba(26,26,0,0.16)] lg:rounded-tl-lg lg:rounded-br-none lg:p-20 dark:bg-[#161615] dark:text-[#EDEDEC] dark:shadow-[inset_0px_0px_0px_1px_#fffaed2d]">
+                            <h1 className="mb-1 font-medium">Let's get started</h1>
+                            <p className="mb-2 text-[#706f6c] dark:text-[#A1A09A]">
+                                Laravel has an incredibly rich ecosystem.
+                                <br />
+                                We suggest starting with the following.
+                            </p>
+                            <ul className="mb-4 flex flex-col lg:mb-6">
+                                <li className="relative flex items-center gap-4 py-2 before:absolute before:top-1/2 before:bottom-0 before:left-[0.4rem] before:border-l before:border-[#e3e3e0] dark:before:border-[#3E3E3A]">
+                                    <span className="relative bg-white py-1 dark:bg-[#161615]">
+                                        <span className="flex h-3.5 w-3.5 items-center justify-center rounded-full border border-[#e3e3e0] bg-[#FDFDFC] shadow-[0px_0px_1px_0px_rgba(0,0,0,0.03),0px_1px_2px_0px_rgba(0,0,0,0.06)] dark:border-[#3E3E3A] dark:bg-[#161615]">
+                                            <span className="h-1.5 w-1.5 rounded-full bg-[#dbdbd7] dark:bg-[#3E3E3A]" />
+                                        </span>
+                                    </span>
+                                    <span>
+                                        Read the
+                                        <a
+                                            href="https://laravel.com/docs"
+                                            target="_blank"
+                                            className="ml-1 inline-flex items-center space-x-1 font-medium text-[#f53003] underline underline-offset-4 dark:text-[#FF4433]"
+                                        >
+                                            <span>Documentation</span>
+                                            <svg
+                                                width={10}
+                                                height={11}
+                                                viewBox="0 0 10 11"
+                                                fill="none"
+                                                xmlns="http://www.w3.org/2000/svg"
+                                                className="h-2.5 w-2.5"
+                                            >
+                                                <path
+                                                    d="M7.70833 6.95834V2.79167H3.54167M2.5 8L7.5 3.00001"
+                                                    stroke="currentColor"
+                                                    strokeLinecap="square"
+                                                />
+                                            </svg>
+                                        </a>
+                                    </span>
+                                </li>
+                                <li className="relative flex items-center gap-4 py-2 before:absolute before:top-0 before:bottom-1/2 before:left-[0.4rem] before:border-l before:border-[#e3e3e0] dark:before:border-[#3E3E3A]">
+                                    <span className="relative bg-white py-1 dark:bg-[#161615]">
+                                        <span className="flex h-3.5 w-3.5 items-center justify-center rounded-full border border-[#e3e3e0] bg-[#FDFDFC] shadow-[0px_0px_1px_0px_rgba(0,0,0,0.03),0px_1px_2px_0px_rgba(0,0,0,0.06)] dark:border-[#3E3E3A] dark:bg-[#161615]">
+                                            <span className="h-1.5 w-1.5 rounded-full bg-[#dbdbd7] dark:bg-[#3E3E3A]" />
+                                        </span>
+                                    </span>
+                                    <span>
+                                        Watch video tutorials at
+                                        <a
+                                            href="https://laracasts.com"
+                                            target="_blank"
+                                            className="ml-1 inline-flex items-center space-x-1 font-medium text-[#f53003] underline underline-offset-4 dark:text-[#FF4433]"
+                                        >
+                                            <span>Laracasts</span>
+                                            <svg
+                                                width={10}
+                                                height={11}
+                                                viewBox="0 0 10 11"
+                                                fill="none"
+                                                xmlns="http://www.w3.org/2000/svg"
+                                                className="h-2.5 w-2.5"
+                                            >
+                                                <path
+                                                    d="M7.70833 6.95834V2.79167H3.54167M2.5 8L7.5 3.00001"
+                                                    stroke="currentColor"
+                                                    strokeLinecap="square"
+                                                />
+                                            </svg>
+                                        </a>
+                                    </span>
+                                </li>
+                            </ul>
+                            <ul className="flex gap-3 text-sm leading-normal">
+                                <li>
+                                    <a
+                                        href="https://cloud.laravel.com"
+                                        target="_blank"
+                                        className="inline-block rounded-sm border border-black bg-[#1b1b18] px-5 py-1.5 text-sm leading-normal text-white hover:border-black hover:bg-black dark:border-[#eeeeec] dark:bg-[#eeeeec] dark:text-[#1C1C1A] dark:hover:border-white dark:hover:bg-white"
+                                    >
+                                        Deploy now
+                                    </a>
+                                </li>
+                            </ul>
+                        </div>
+                        <div className="relative -mb-px aspect-[335/376] w-full shrink-0 overflow-hidden rounded-t-lg bg-[#fff2f2] lg:mb-0 lg:-ml-px lg:aspect-auto lg:w-[438px] lg:rounded-t-none lg:rounded-r-lg dark:bg-[#1D0002]">
+                            <svg
+                                className="w-full max-w-none translate-y-0 text-[#F53003] opacity-100 transition-all duration-750 dark:text-[#F61500] starting:translate-y-6 starting:opacity-0"
+                                viewBox="0 0 438 104"
+                                fill="none"
+                                xmlns="http://www.w3.org/2000/svg"
+                            >
+                                <path d="M17.2036 -3H0V102.197H49.5189V86.7187H17.2036V-3Z" fill="currentColor" />
+                                <path
+                                    d="M110.256 41.6337C108.061 38.1275 104.945 35.3731 100.905 33.3681C96.8667 31.3647 92.8016 30.3618 88.7131 30.3618C83.4247 30.3618 78.5885 31.3389 74.201 33.2923C69.8111 35.2456 66.0474 37.928 62.9059 41.3333C59.7643 44.7401 57.3198 48.6726 55.5754 53.1293C53.8287 57.589 52.9572 62.274 52.9572 67.1813C52.9572 72.1925 53.8287 76.8995 55.5754 81.3069C57.3191 85.7173 59.7636 89.6241 62.9059 93.0293C66.0474 96.4361 69.8119 99.1155 74.201 101.069C78.5885 103.022 83.4247 103.999 88.7131 103.999C92.8016 103.999 96.8667 102.997 100.905 100.994C104.945 98.9911 108.061 96.2359 110.256 92.7282V102.195H126.563V32.1642H110.256V41.6337ZM108.76 75.7472C107.762 78.4531 106.366 80.8078 104.572 82.8112C102.776 84.8161 100.606 86.4183 98.0637 87.6206C95.5202 88.823 92.7004 89.4238 89.6103 89.4238C86.5178 89.4238 83.7252 88.823 81.2324 87.6206C78.7388 86.4183 76.5949 84.8161 74.7998 82.8112C73.004 80.8078 71.6319 78.4531 70.6856 75.7472C69.7356 73.0421 69.2644 70.1868 69.2644 67.1821C69.2644 64.1758 69.7356 61.3205 70.6856 58.6154C71.6319 55.9102 73.004 53.5571 74.7998 51.5522C76.5949 49.5495 78.738 47.9451 81.2324 46.7427C83.7252 45.5404 86.5178 44.9396 89.6103 44.9396C92.7012 44.9396 95.5202 45.5404 98.0637 46.7427C100.606 47.9451 102.776 49.5487 104.572 51.5522C106.367 53.5571 107.762 55.9102 108.76 58.6154C109.756 61.3205 110.256 64.1758 110.256 67.1821C110.256 70.1868 109.756 73.0421 108.76 75.7472Z"
+                                    fill="currentColor"
+                                />
+                                <path
+                                    d="M242.805 41.6337C240.611 38.1275 237.494 35.3731 233.455 33.3681C229.416 31.3647 225.351 30.3618 221.262 30.3618C215.974 30.3618 211.138 31.3389 206.75 33.2923C202.36 35.2456 198.597 37.928 195.455 41.3333C192.314 44.7401 189.869 48.6726 188.125 53.1293C186.378 57.589 185.507 62.274 185.507 67.1813C185.507 72.1925 186.378 76.8995 188.125 81.3069C189.868 85.7173 192.313 89.6241 195.455 93.0293C198.597 96.4361 202.361 99.1155 206.75 101.069C211.138 103.022 215.974 103.999 221.262 103.999C225.351 103.999 229.416 102.997 233.455 100.994C237.494 98.9911 240.611 96.2359 242.805 92.7282V102.195H259.112V32.1642H242.805V41.6337ZM241.31 75.7472C240.312 78.4531 238.916 80.8078 237.122 82.8112C235.326 84.8161 233.156 86.4183 230.614 87.6206C228.07 88.823 225.251 89.4238 222.16 89.4238C219.068 89.4238 216.275 88.823 213.782 87.6206C211.289 86.4183 209.145 84.8161 207.35 82.8112C205.554 80.8078 204.182 78.4531 203.236 75.7472C202.286 73.0421 201.814 70.1868 201.814 67.1821C201.814 64.1758 202.286 61.3205 203.236 58.6154C204.182 55.9102 205.554 53.5571 207.35 51.5522C209.145 49.5495 211.288 47.9451 213.782 46.7427C216.275 45.5404 219.068 44.9396 222.16 44.9396C225.251 44.9396 228.07 45.5404 230.614 46.7427C233.156 47.9451 235.326 49.5487 237.122 51.5522C238.917 53.5571 240.312 55.9102 241.31 58.6154C242.306 61.3205 242.806 64.1758 242.806 67.1821C242.805 70.1868 242.305 73.0421 241.31 75.7472Z"
+                                    fill="currentColor"
+                                />
+                                <path d="M438 -3H421.694V102.197H438V-3Z" fill="currentColor" />
+                                <path d="M139.43 102.197H155.735V48.2834H183.712V32.1665H139.43V102.197Z" fill="currentColor" />
+                                <path
+                                    d="M324.49 32.1665L303.995 85.794L283.498 32.1665H266.983L293.748 102.197H314.242L341.006 32.1665H324.49Z"
+                                    fill="currentColor"
+                                />
+                                <path
+                                    d="M376.571 30.3656C356.603 30.3656 340.797 46.8497 340.797 67.1828C340.797 89.6597 356.094 104 378.661 104C391.29 104 399.354 99.1488 409.206 88.5848L398.189 80.0226C398.183 80.031 389.874 90.9895 377.468 90.9895C363.048 90.9895 356.977 79.3111 356.977 73.269H411.075C413.917 50.1328 398.775 30.3656 376.571 30.3656ZM357.02 61.0967C357.145 59.7487 359.023 43.3761 376.442 43.3761C393.861 43.3761 395.978 59.7464 396.099 61.0967H357.02Z"
+                                    fill="currentColor"
+                                />
+                            </svg>
+                            <svg
+                                className="relative -mt-[4.9rem] -ml-8 w-[448px] max-w-none lg:-mt-[6.6rem] lg:ml-0 dark:hidden"
+                                viewBox="0 0 440 376"
+                                fill="none"
+                                xmlns="http://www.w3.org/2000/svg"
+                            >
+                                <g className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0">
+                                    <path
+                                        d="M188.263 355.73L188.595 355.73C195.441 348.845 205.766 339.761 219.569 328.477C232.93 317.193 242.978 308.205 249.714 301.511C256.34 294.626 260.867 287.358 263.296 279.708C265.725 272.058 264.565 264.121 259.816 255.896C254.516 246.716 247.062 239.352 237.454 233.805C227.957 228.067 217.908 225.198 207.307 225.198C196.927 225.197 190.136 227.97 186.934 233.516C183.621 238.872 184.726 246.331 190.247 255.894L125.647 255.891C116.371 239.825 112.395 225.481 113.72 212.858C115.265 200.235 121.559 190.481 132.602 183.596C143.754 176.52 158.607 172.982 177.159 172.983C196.594 172.984 215.863 176.523 234.968 183.6C253.961 190.486 271.299 200.241 286.98 212.864C302.661 225.488 315.14 239.833 324.416 255.899C333.03 270.817 336.841 283.918 335.847 295.203C335.075 306.487 331.376 316.336 324.75 324.751C318.346 333.167 308.408 343.494 294.936 355.734L377.094 355.737L405.917 405.656L217.087 405.649L188.263 355.73Z"
+                                        fill="black"
+                                    />
+                                    <path
+                                        d="M9.11884 226.339L-13.7396 226.338L-42.7286 176.132L43.0733 176.135L175.595 405.649L112.651 405.647L9.11884 226.339Z"
+                                        fill="black"
+                                    />
+                                    <path
+                                        d="M188.263 355.73L188.595 355.73C195.441 348.845 205.766 339.761 219.569 328.477C232.93 317.193 242.978 308.205 249.714 301.511C256.34 294.626 260.867 287.358 263.296 279.708C265.725 272.058 264.565 264.121 259.816 255.896C254.516 246.716 247.062 239.352 237.454 233.805C227.957 228.067 217.908 225.198 207.307 225.198C196.927 225.197 190.136 227.97 186.934 233.516C183.621 238.872 184.726 246.331 190.247 255.894L125.647 255.891C116.371 239.825 112.395 225.481 113.72 212.858C115.265 200.235 121.559 190.481 132.602 183.596C143.754 176.52 158.607 172.982 177.159 172.983C196.594 172.984 215.863 176.523 234.968 183.6C253.961 190.486 271.299 200.241 286.98 212.864C302.661 225.488 315.14 239.833 324.416 255.899C333.03 270.817 336.841 283.918 335.847 295.203C335.075 306.487 331.376 316.336 324.75 324.751C318.346 333.167 308.408 343.494 294.936 355.734L377.094 355.737L405.917 405.656L217.087 405.649L188.263 355.73Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M9.11884 226.339L-13.7396 226.338L-42.7286 176.132L43.0733 176.135L175.595 405.649L112.651 405.647L9.11884 226.339Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M204.592 327.449L204.923 327.449C211.769 320.564 222.094 311.479 235.897 300.196C249.258 288.912 259.306 279.923 266.042 273.23C272.668 266.345 277.195 259.077 279.624 251.427C282.053 243.777 280.893 235.839 276.145 227.615C270.844 218.435 263.39 211.071 253.782 205.524C244.285 199.786 234.236 196.917 223.635 196.916C213.255 196.916 206.464 199.689 203.262 205.235C199.949 210.59 201.054 218.049 206.575 227.612L141.975 227.61C132.699 211.544 128.723 197.2 130.048 184.577C131.593 171.954 137.887 162.2 148.93 155.315C160.083 148.239 174.935 144.701 193.487 144.702C212.922 144.703 232.192 148.242 251.296 155.319C270.289 162.205 287.627 171.96 303.308 184.583C318.989 197.207 331.468 211.552 340.745 227.618C349.358 242.536 353.169 255.637 352.175 266.921C351.403 278.205 347.704 288.055 341.078 296.47C334.674 304.885 324.736 315.213 311.264 327.453L393.422 327.456L422.246 377.375L233.415 377.368L204.592 327.449Z"
+                                        fill="#F8B803"
+                                    />
+                                    <path
+                                        d="M25.447 198.058L2.58852 198.057L-26.4005 147.851L59.4015 147.854L191.923 377.368L128.979 377.365L25.447 198.058Z"
+                                        fill="#F8B803"
+                                    />
+                                    <path
+                                        d="M204.592 327.449L204.923 327.449C211.769 320.564 222.094 311.479 235.897 300.196C249.258 288.912 259.306 279.923 266.042 273.23C272.668 266.345 277.195 259.077 279.624 251.427C282.053 243.777 280.893 235.839 276.145 227.615C270.844 218.435 263.39 211.071 253.782 205.524C244.285 199.786 234.236 196.917 223.635 196.916C213.255 196.916 206.464 199.689 203.262 205.235C199.949 210.59 201.054 218.049 206.575 227.612L141.975 227.61C132.699 211.544 128.723 197.2 130.048 184.577C131.593 171.954 137.887 162.2 148.93 155.315C160.083 148.239 174.935 144.701 193.487 144.702C212.922 144.703 232.192 148.242 251.296 155.319C270.289 162.205 287.627 171.96 303.308 184.583C318.989 197.207 331.468 211.552 340.745 227.618C349.358 242.536 353.169 255.637 352.175 266.921C351.403 278.205 347.704 288.055 341.078 296.47C334.674 304.885 324.736 315.213 311.264 327.453L393.422 327.456L422.246 377.375L233.415 377.368L204.592 327.449Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M25.447 198.058L2.58852 198.057L-26.4005 147.851L59.4015 147.854L191.923 377.368L128.979 377.365L25.447 198.058Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                >
+                                    <path
+                                        d="M217.342 305.363L217.673 305.363C224.519 298.478 234.844 289.393 248.647 278.11C262.008 266.826 272.056 257.837 278.792 251.144C285.418 244.259 289.945 236.991 292.374 229.341C294.803 221.691 293.643 213.753 288.895 205.529C283.594 196.349 276.14 188.985 266.532 183.438C257.035 177.7 246.986 174.831 236.385 174.83C226.005 174.83 219.214 177.603 216.012 183.149C212.699 188.504 213.804 195.963 219.325 205.527L154.725 205.524C145.449 189.458 141.473 175.114 142.798 162.491C144.343 149.868 150.637 140.114 161.68 133.229C172.833 126.153 187.685 122.615 206.237 122.616C225.672 122.617 244.942 126.156 264.046 133.233C283.039 140.119 300.377 149.874 316.058 162.497C331.739 175.121 344.218 189.466 353.495 205.532C362.108 220.45 365.919 233.551 364.925 244.835C364.153 256.12 360.454 265.969 353.828 274.384C347.424 282.799 337.486 293.127 324.014 305.367L406.172 305.37L434.996 355.289L246.165 355.282L217.342 305.363Z"
+                                        fill="#F0ACB8"
+                                    />
+                                    <path
+                                        d="M38.197 175.972L15.3385 175.971L-13.6505 125.765L72.1515 125.768L204.673 355.282L141.729 355.279L38.197 175.972Z"
+                                        fill="#F0ACB8"
+                                    />
+                                    <path
+                                        d="M217.342 305.363L217.673 305.363C224.519 298.478 234.844 289.393 248.647 278.11C262.008 266.826 272.056 257.837 278.792 251.144C285.418 244.259 289.945 236.991 292.374 229.341C294.803 221.691 293.643 213.753 288.895 205.529C283.594 196.349 276.14 188.985 266.532 183.438C257.035 177.7 246.986 174.831 236.385 174.83C226.005 174.83 219.214 177.603 216.012 183.149C212.699 188.504 213.804 195.963 219.325 205.527L154.725 205.524C145.449 189.458 141.473 175.114 142.798 162.491C144.343 149.868 150.637 140.114 161.68 133.229C172.833 126.153 187.685 122.615 206.237 122.616C225.672 122.617 244.942 126.156 264.046 133.233C283.039 140.119 300.377 149.874 316.058 162.497C331.739 175.121 344.218 189.466 353.495 205.532C362.108 220.45 365.919 233.551 364.925 244.835C364.153 256.12 360.454 265.969 353.828 274.384C347.424 282.799 337.486 293.127 324.014 305.367L406.172 305.37L434.996 355.289L246.165 355.282L217.342 305.363Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M38.197 175.972L15.3385 175.971L-13.6505 125.765L72.1515 125.768L204.673 355.282L141.729 355.279L38.197 175.972Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g
+                                    /** @ts-expect-error 'plus-darker' doesn't seem to be defined in the 'csstype' module */
+                                    style={{ mixBlendMode: 'plus-darker' }}
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                >
+                                    <path
+                                        d="M230.951 281.792L231.282 281.793C238.128 274.907 248.453 265.823 262.256 254.539C275.617 243.256 285.666 234.267 292.402 227.573C299.027 220.688 303.554 213.421 305.983 205.771C308.412 198.12 307.253 190.183 302.504 181.959C297.203 172.778 289.749 165.415 280.142 159.868C270.645 154.13 260.596 151.26 249.995 151.26C239.615 151.26 232.823 154.033 229.621 159.579C226.309 164.934 227.413 172.393 232.935 181.956L168.335 181.954C159.058 165.888 155.082 151.543 156.407 138.92C157.953 126.298 164.247 116.544 175.289 109.659C186.442 102.583 201.294 99.045 219.846 99.0457C239.281 99.0464 258.551 102.585 277.655 109.663C296.649 116.549 313.986 126.303 329.667 138.927C345.349 151.551 357.827 165.895 367.104 181.961C375.718 196.88 379.528 209.981 378.535 221.265C377.762 232.549 374.063 242.399 367.438 250.814C361.033 259.229 351.095 269.557 337.624 281.796L419.782 281.8L448.605 331.719L259.774 331.712L230.951 281.792Z"
+                                        fill="#F3BEC7"
+                                    />
+                                    <path
+                                        d="M51.8063 152.402L28.9479 152.401L-0.0411453 102.195L85.7608 102.198L218.282 331.711L155.339 331.709L51.8063 152.402Z"
+                                        fill="#F3BEC7"
+                                    />
+                                    <path
+                                        d="M230.951 281.792L231.282 281.793C238.128 274.907 248.453 265.823 262.256 254.539C275.617 243.256 285.666 234.267 292.402 227.573C299.027 220.688 303.554 213.421 305.983 205.771C308.412 198.12 307.253 190.183 302.504 181.959C297.203 172.778 289.749 165.415 280.142 159.868C270.645 154.13 260.596 151.26 249.995 151.26C239.615 151.26 232.823 154.033 229.621 159.579C226.309 164.934 227.413 172.393 232.935 181.956L168.335 181.954C159.058 165.888 155.082 151.543 156.407 138.92C157.953 126.298 164.247 116.544 175.289 109.659C186.442 102.583 201.294 99.045 219.846 99.0457C239.281 99.0464 258.551 102.585 277.655 109.663C296.649 116.549 313.986 126.303 329.667 138.927C345.349 151.551 357.827 165.895 367.104 181.961C375.718 196.88 379.528 209.981 378.535 221.265C377.762 232.549 374.063 242.399 367.438 250.814C361.033 259.229 351.095 269.557 337.624 281.796L419.782 281.8L448.605 331.719L259.774 331.712L230.951 281.792Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M51.8063 152.402L28.9479 152.401L-0.0411453 102.195L85.7608 102.198L218.282 331.711L155.339 331.709L51.8063 152.402Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0">
+                                    <path
+                                        d="M188.467 355.363L188.798 355.363C195.644 348.478 205.969 339.393 219.772 328.11C233.133 316.826 243.181 307.837 249.917 301.144C253.696 297.217 256.792 293.166 259.205 288.991C261.024 285.845 262.455 282.628 263.499 279.341C265.928 271.691 264.768 263.753 260.02 255.529C254.719 246.349 247.265 238.985 237.657 233.438C228.16 227.7 218.111 224.831 207.51 224.83C197.13 224.83 190.339 227.603 187.137 233.149C183.824 238.504 184.929 245.963 190.45 255.527L125.851 255.524C116.574 239.458 112.598 225.114 113.923 212.491C114.615 206.836 116.261 201.756 118.859 197.253C122.061 191.704 126.709 187.03 132.805 183.229C143.958 176.153 158.81 172.615 177.362 172.616C196.797 172.617 216.067 176.156 235.171 183.233C254.164 190.119 271.502 199.874 287.183 212.497C302.864 225.121 315.343 239.466 324.62 255.532C333.233 270.45 337.044 283.551 336.05 294.835C335.46 303.459 333.16 311.245 329.151 318.194C327.915 320.337 326.515 322.4 324.953 324.384C318.549 332.799 308.611 343.127 295.139 355.367L377.297 355.37L406.121 405.289L217.29 405.282L188.467 355.363Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M9.32197 225.972L-13.5365 225.971L-42.5255 175.765L43.2765 175.768L175.798 405.282L112.854 405.279L9.32197 225.972Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M345.247 111.915C329.566 99.2919 312.229 89.5371 293.235 82.6512L235.167 183.228C254.161 190.114 271.498 199.869 287.179 212.492L345.247 111.915Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M382.686 154.964C373.41 138.898 360.931 124.553 345.25 111.93L287.182 212.506C302.863 225.13 315.342 239.475 324.618 255.541L382.686 154.964Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M293.243 82.6472C274.139 75.57 254.869 72.031 235.434 72.0303L177.366 172.607C196.801 172.608 216.071 176.147 235.175 183.224L293.243 82.6472Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M394.118 194.257C395.112 182.973 391.301 169.872 382.688 154.953L324.619 255.53C333.233 270.448 337.044 283.55 336.05 294.834L394.118 194.257Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M235.432 72.0311C216.88 72.0304 202.027 75.5681 190.875 82.6442L132.806 183.221C143.959 176.145 158.812 172.607 177.363 172.608L235.432 72.0311Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M265.59 124.25C276.191 124.251 286.24 127.12 295.737 132.858L237.669 233.435C228.172 227.697 218.123 224.828 207.522 224.827L265.59 124.25Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M295.719 132.859C305.326 138.406 312.78 145.77 318.081 154.95L260.013 255.527C254.712 246.347 247.258 238.983 237.651 233.436L295.719 132.859Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M387.218 217.608C391.227 210.66 393.527 202.874 394.117 194.25L336.049 294.827C335.459 303.451 333.159 311.237 329.15 318.185L387.218 217.608Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M245.211 132.577C248.413 127.03 255.204 124.257 265.584 124.258L207.516 224.835C197.136 224.834 190.345 227.607 187.143 233.154L245.211 132.577Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M318.094 154.945C322.842 163.17 324.002 171.107 321.573 178.757L263.505 279.334C265.934 271.684 264.774 263.746 260.026 255.522L318.094 154.945Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M176.925 96.6737C180.127 91.1249 184.776 86.4503 190.871 82.6499L132.803 183.227C126.708 187.027 122.059 191.702 118.857 197.25L176.925 96.6737Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M387.226 217.606C385.989 219.749 384.59 221.813 383.028 223.797L324.96 324.373C326.522 322.39 327.921 320.326 329.157 318.183L387.226 217.606Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M317.269 188.408C319.087 185.262 320.519 182.045 321.562 178.758L263.494 279.335C262.451 282.622 261.019 285.839 259.201 288.985L317.269 188.408Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M245.208 132.573C241.895 137.928 243 145.387 248.522 154.95L190.454 255.527C184.932 245.964 183.827 238.505 187.14 233.15L245.208 132.573Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M176.93 96.6719C174.331 101.175 172.686 106.255 171.993 111.91L113.925 212.487C114.618 206.831 116.263 201.752 118.862 197.249L176.93 96.6719Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M317.266 188.413C314.853 192.589 311.757 196.64 307.978 200.566L249.91 301.143C253.689 297.216 256.785 293.166 259.198 288.99L317.266 188.413Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M464.198 304.708L435.375 254.789L377.307 355.366L406.13 405.285L464.198 304.708Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M353.209 254.787C366.68 242.548 376.618 232.22 383.023 223.805L324.955 324.382C318.55 332.797 308.612 343.124 295.141 355.364L353.209 254.787Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M435.37 254.787L353.212 254.784L295.144 355.361L377.302 355.364L435.37 254.787Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M183.921 154.947L248.521 154.95L190.453 255.527L125.853 255.524L183.921 154.947Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M171.992 111.914C170.668 124.537 174.643 138.881 183.92 154.947L125.852 255.524C116.575 239.458 112.599 225.114 113.924 212.491L171.992 111.914Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M307.987 200.562C301.251 207.256 291.203 216.244 277.842 227.528L219.774 328.105C233.135 316.821 243.183 307.832 249.919 301.139L307.987 200.562Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M15.5469 75.1797L44.5359 125.386L-13.5321 225.963L-42.5212 175.756L15.5469 75.1797Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M277.836 227.536C264.033 238.82 253.708 247.904 246.862 254.789L188.794 355.366C195.64 348.481 205.965 339.397 219.768 328.113L277.836 227.536Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M275.358 304.706L464.189 304.713L406.12 405.29L217.29 405.283L275.358 304.706Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M44.5279 125.39L67.3864 125.39L9.31834 225.967L-13.5401 225.966L44.5279 125.39Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M101.341 75.1911L233.863 304.705L175.795 405.282L43.2733 175.768L101.341 75.1911ZM15.5431 75.19L-42.525 175.767L43.277 175.77L101.345 75.1932L15.5431 75.19Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M246.866 254.784L246.534 254.784L188.466 355.361L188.798 355.361L246.866 254.784Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M246.539 254.781L275.362 304.701L217.294 405.277L188.471 355.358L246.539 254.781Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M67.3906 125.391L170.923 304.698L112.855 405.275L9.32257 225.967L67.3906 125.391Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M170.921 304.699L233.865 304.701L175.797 405.278L112.853 405.276L170.921 304.699Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                </g>
+                                <g
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                >
+                                    <path
+                                        d="M246.544 254.79L246.875 254.79C253.722 247.905 264.046 238.82 277.849 227.537C291.21 216.253 301.259 207.264 307.995 200.57C314.62 193.685 319.147 186.418 321.577 178.768C324.006 171.117 322.846 163.18 318.097 154.956C312.796 145.775 305.342 138.412 295.735 132.865C286.238 127.127 276.189 124.258 265.588 124.257C255.208 124.257 248.416 127.03 245.214 132.576C241.902 137.931 243.006 145.39 248.528 154.953L183.928 154.951C174.652 138.885 170.676 124.541 172 111.918C173.546 99.2946 179.84 89.5408 190.882 82.6559C202.035 75.5798 216.887 72.0421 235.439 72.0428C254.874 72.0435 274.144 75.5825 293.248 82.6598C312.242 89.5457 329.579 99.3005 345.261 111.924C360.942 124.548 373.421 138.892 382.697 154.958C391.311 169.877 395.121 182.978 394.128 194.262C393.355 205.546 389.656 215.396 383.031 223.811C376.627 232.226 366.688 242.554 353.217 254.794L435.375 254.797L464.198 304.716L275.367 304.709L246.544 254.79Z"
+                                        fill="#F0ACB8"
+                                    />
+                                    <path
+                                        d="M246.544 254.79L246.875 254.79C253.722 247.905 264.046 238.82 277.849 227.537C291.21 216.253 301.259 207.264 307.995 200.57C314.62 193.685 319.147 186.418 321.577 178.768C324.006 171.117 322.846 163.18 318.097 154.956C312.796 145.775 305.342 138.412 295.735 132.865C286.238 127.127 276.189 124.258 265.588 124.257C255.208 124.257 248.416 127.03 245.214 132.576C241.902 137.931 243.006 145.39 248.528 154.953L183.928 154.951C174.652 138.885 170.676 124.541 172 111.918C173.546 99.2946 179.84 89.5408 190.882 82.6559C202.035 75.5798 216.887 72.0421 235.439 72.0428C254.874 72.0435 274.144 75.5825 293.248 82.6598C312.242 89.5457 329.579 99.3005 345.261 111.924C360.942 124.548 373.421 138.892 382.697 154.958C391.311 169.877 395.121 182.978 394.128 194.262C393.355 205.546 389.656 215.396 383.031 223.811C376.627 232.226 366.688 242.554 353.217 254.794L435.375 254.797L464.198 304.716L275.367 304.709L246.544 254.79Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                        strokeLinejoin="round"
+                                    />
+                                </g>
+                                <g
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                >
+                                    <path
+                                        d="M67.41 125.402L44.5515 125.401L15.5625 75.1953L101.364 75.1985L233.886 304.712L170.942 304.71L67.41 125.402Z"
+                                        fill="#F0ACB8"
+                                    />
+                                    <path
+                                        d="M67.41 125.402L44.5515 125.401L15.5625 75.1953L101.364 75.1985L233.886 304.712L170.942 304.71L67.41 125.402Z"
+                                        stroke="#1B1B18"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                            </svg>
+                            <svg
+                                className="relative -mt-[4.9rem] -ml-8 hidden w-[448px] max-w-none lg:-mt-[6.6rem] lg:ml-0 dark:block"
+                                viewBox="0 0 440 376"
+                                fill="none"
+                                xmlns="http://www.w3.org/2000/svg"
+                            >
+                                <g className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0">
+                                    <path
+                                        d="M188.263 355.73L188.595 355.73C195.441 348.845 205.766 339.761 219.569 328.477C232.93 317.193 242.978 308.205 249.714 301.511C256.34 294.626 260.867 287.358 263.296 279.708C265.725 272.058 264.565 264.121 259.816 255.896C254.516 246.716 247.062 239.352 237.454 233.805C227.957 228.067 217.908 225.198 207.307 225.198C196.927 225.197 190.136 227.97 186.934 233.516C183.621 238.872 184.726 246.331 190.247 255.894L125.647 255.891C116.371 239.825 112.395 225.481 113.72 212.858C115.265 200.235 121.559 190.481 132.602 183.596C143.754 176.52 158.607 172.982 177.159 172.983C196.594 172.984 215.863 176.523 234.968 183.6C253.961 190.486 271.299 200.241 286.98 212.864C302.661 225.488 315.14 239.833 324.416 255.899C333.03 270.817 336.841 283.918 335.847 295.203C335.075 306.487 331.376 316.336 324.75 324.751C318.346 333.167 308.408 343.494 294.936 355.734L377.094 355.737L405.917 405.656L217.087 405.649L188.263 355.73Z"
+                                        fill="black"
+                                    />
+                                    <path
+                                        d="M9.11884 226.339L-13.7396 226.338L-42.7286 176.132L43.0733 176.135L175.595 405.649L112.651 405.647L9.11884 226.339Z"
+                                        fill="black"
+                                    />
+                                    <path
+                                        d="M188.263 355.73L188.595 355.73C195.441 348.845 205.766 339.761 219.569 328.477C232.93 317.193 242.978 308.205 249.714 301.511C256.34 294.626 260.867 287.358 263.296 279.708C265.725 272.058 264.565 264.121 259.816 255.896C254.516 246.716 247.062 239.352 237.454 233.805C227.957 228.067 217.908 225.198 207.307 225.198C196.927 225.197 190.136 227.97 186.934 233.516C183.621 238.872 184.726 246.331 190.247 255.894L125.647 255.891C116.371 239.825 112.395 225.481 113.72 212.858C115.265 200.235 121.559 190.481 132.602 183.596C143.754 176.52 158.607 172.982 177.159 172.983C196.594 172.984 215.863 176.523 234.968 183.6C253.961 190.486 271.299 200.241 286.98 212.864C302.661 225.488 315.14 239.833 324.416 255.899C333.03 270.817 336.841 283.918 335.847 295.203C335.075 306.487 331.376 316.336 324.75 324.751C318.346 333.167 308.408 343.494 294.936 355.734L377.094 355.737L405.917 405.656L217.087 405.649L188.263 355.73Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M9.11884 226.339L-13.7396 226.338L-42.7286 176.132L43.0733 176.135L175.595 405.649L112.651 405.647L9.11884 226.339Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M204.592 327.449L204.923 327.449C211.769 320.564 222.094 311.479 235.897 300.196C249.258 288.912 259.306 279.923 266.042 273.23C272.668 266.345 277.195 259.077 279.624 251.427C282.053 243.777 280.893 235.839 276.145 227.615C270.844 218.435 263.39 211.071 253.782 205.524C244.285 199.786 234.236 196.917 223.635 196.916C213.255 196.916 206.464 199.689 203.262 205.235C199.949 210.59 201.054 218.049 206.575 227.612L141.975 227.61C132.699 211.544 128.723 197.2 130.048 184.577C131.593 171.954 137.887 162.2 148.93 155.315C160.083 148.239 174.935 144.701 193.487 144.702C212.922 144.703 232.192 148.242 251.296 155.319C270.289 162.205 287.627 171.96 303.308 184.583C318.989 197.207 331.468 211.552 340.745 227.618C349.358 242.536 353.169 255.637 352.175 266.921C351.403 278.205 347.704 288.055 341.078 296.47C334.674 304.885 324.736 315.213 311.264 327.453L393.422 327.456L422.246 377.375L233.415 377.368L204.592 327.449Z"
+                                        fill="#391800"
+                                    />
+                                    <path
+                                        d="M25.447 198.058L2.58852 198.057L-26.4005 147.851L59.4015 147.854L191.923 377.368L128.979 377.365L25.447 198.058Z"
+                                        fill="#391800"
+                                    />
+                                    <path
+                                        d="M204.592 327.449L204.923 327.449C211.769 320.564 222.094 311.479 235.897 300.196C249.258 288.912 259.306 279.923 266.042 273.23C272.668 266.345 277.195 259.077 279.624 251.427C282.053 243.777 280.893 235.839 276.145 227.615C270.844 218.435 263.39 211.071 253.782 205.524C244.285 199.786 234.236 196.917 223.635 196.916C213.255 196.916 206.464 199.689 203.262 205.235C199.949 210.59 201.054 218.049 206.575 227.612L141.975 227.61C132.699 211.544 128.723 197.2 130.048 184.577C131.593 171.954 137.887 162.2 148.93 155.315C160.083 148.239 174.935 144.701 193.487 144.702C212.922 144.703 232.192 148.242 251.296 155.319C270.289 162.205 287.627 171.96 303.308 184.583C318.989 197.207 331.468 211.552 340.745 227.618C349.358 242.536 353.169 255.637 352.175 266.921C351.403 278.205 347.704 288.055 341.078 296.47C334.674 304.885 324.736 315.213 311.264 327.453L393.422 327.456L422.246 377.375L233.415 377.368L204.592 327.449Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M25.447 198.058L2.58852 198.057L-26.4005 147.851L59.4015 147.854L191.923 377.368L128.979 377.365L25.447 198.058Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                >
+                                    <path
+                                        d="M217.342 305.363L217.673 305.363C224.519 298.478 234.844 289.393 248.647 278.11C262.008 266.826 272.056 257.837 278.792 251.144C285.418 244.259 289.945 236.991 292.374 229.341C294.803 221.691 293.643 213.753 288.895 205.529C283.594 196.349 276.14 188.985 266.532 183.438C257.035 177.7 246.986 174.831 236.385 174.83C226.005 174.83 219.214 177.603 216.012 183.149C212.699 188.504 213.804 195.963 219.325 205.527L154.725 205.524C145.449 189.458 141.473 175.114 142.798 162.491C144.343 149.868 150.637 140.114 161.68 133.229C172.833 126.153 187.685 122.615 206.237 122.616C225.672 122.617 244.942 126.156 264.046 133.233C283.039 140.119 300.377 149.874 316.058 162.497C331.739 175.121 344.218 189.466 353.495 205.532C362.108 220.45 365.919 233.551 364.925 244.835C364.153 256.12 360.454 265.969 353.828 274.384C347.424 282.799 337.486 293.127 324.014 305.367L406.172 305.37L434.996 355.289L246.165 355.282L217.342 305.363Z"
+                                        fill="#733000"
+                                    />
+                                    <path
+                                        d="M38.197 175.972L15.3385 175.971L-13.6505 125.765L72.1515 125.768L204.673 355.282L141.729 355.279L38.197 175.972Z"
+                                        fill="#733000"
+                                    />
+                                    <path
+                                        d="M217.342 305.363L217.673 305.363C224.519 298.478 234.844 289.393 248.647 278.11C262.008 266.826 272.056 257.837 278.792 251.144C285.418 244.259 289.945 236.991 292.374 229.341C294.803 221.691 293.643 213.753 288.895 205.529C283.594 196.349 276.14 188.985 266.532 183.438C257.035 177.7 246.986 174.831 236.385 174.83C226.005 174.83 219.214 177.603 216.012 183.149C212.699 188.504 213.804 195.963 219.325 205.527L154.725 205.524C145.449 189.458 141.473 175.114 142.798 162.491C144.343 149.868 150.637 140.114 161.68 133.229C172.833 126.153 187.685 122.615 206.237 122.616C225.672 122.617 244.942 126.156 264.046 133.233C283.039 140.119 300.377 149.874 316.058 162.497C331.739 175.121 344.218 189.466 353.495 205.532C362.108 220.45 365.919 233.551 364.925 244.835C364.153 256.12 360.454 265.969 353.828 274.384C347.424 282.799 337.486 293.127 324.014 305.367L406.172 305.37L434.996 355.289L246.165 355.282L217.342 305.363Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M38.197 175.972L15.3385 175.971L-13.6505 125.765L72.1515 125.768L204.673 355.282L141.729 355.279L38.197 175.972Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0">
+                                    <path
+                                        d="M217.342 305.363L217.673 305.363C224.519 298.478 234.844 289.393 248.647 278.11C262.008 266.826 272.056 257.837 278.792 251.144C285.418 244.259 289.945 236.991 292.374 229.341C294.803 221.691 293.643 213.753 288.895 205.529C283.594 196.349 276.14 188.985 266.532 183.438C257.035 177.7 246.986 174.831 236.385 174.83C226.005 174.83 219.214 177.603 216.012 183.149C212.699 188.504 213.804 195.963 219.325 205.527L154.726 205.524C145.449 189.458 141.473 175.114 142.798 162.491C144.343 149.868 150.637 140.114 161.68 133.229C172.833 126.153 187.685 122.615 206.237 122.616C225.672 122.617 244.942 126.156 264.046 133.233C283.039 140.119 300.377 149.874 316.058 162.497C331.739 175.121 344.218 189.466 353.495 205.532C362.108 220.45 365.919 233.551 364.925 244.835C364.153 256.12 360.454 265.969 353.828 274.384C347.424 282.799 337.486 293.127 324.014 305.367L406.172 305.37L434.996 355.289L246.165 355.282L217.342 305.363Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                    <path
+                                        d="M38.197 175.972L15.3385 175.971L-13.6505 125.765L72.1515 125.768L204.673 355.282L141.729 355.279L38.197 175.972Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                                <g className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0">
+                                    <path
+                                        d="M188.467 355.363L188.798 355.363C195.644 348.478 205.969 339.393 219.772 328.11C233.133 316.826 243.181 307.837 249.917 301.144C253.696 297.217 256.792 293.166 259.205 288.991C261.024 285.845 262.455 282.628 263.499 279.341C265.928 271.691 264.768 263.753 260.02 255.529C254.719 246.349 247.265 238.985 237.657 233.438C228.16 227.7 218.111 224.831 207.51 224.83C197.13 224.83 190.339 227.603 187.137 233.149C183.824 238.504 184.929 245.963 190.45 255.527L125.851 255.524C116.574 239.458 112.598 225.114 113.923 212.491C114.615 206.836 116.261 201.756 118.859 197.253C122.061 191.704 126.709 187.03 132.805 183.229C143.958 176.153 158.81 172.615 177.362 172.616C196.797 172.617 216.067 176.156 235.171 183.233C254.164 190.119 271.502 199.874 287.183 212.497C302.864 225.121 315.343 239.466 324.62 255.532C333.233 270.45 337.044 283.551 336.05 294.835C335.46 303.459 333.16 311.245 329.151 318.194C327.915 320.337 326.515 322.4 324.953 324.384C318.549 332.799 308.611 343.127 295.139 355.367L377.297 355.37L406.121 405.289L217.29 405.282L188.467 355.363Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M9.32197 225.972L-13.5365 225.971L-42.5255 175.765L43.2765 175.768L175.798 405.282L112.854 405.279L9.32197 225.972Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M345.247 111.915C329.566 99.2919 312.229 89.5371 293.235 82.6512L235.167 183.228C254.161 190.114 271.498 199.869 287.179 212.492L345.247 111.915Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M382.686 154.964C373.41 138.898 360.931 124.553 345.25 111.93L287.182 212.506C302.863 225.13 315.342 239.475 324.618 255.541L382.686 154.964Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M293.243 82.6472C274.139 75.57 254.869 72.031 235.434 72.0303L177.366 172.607C196.801 172.608 216.071 176.147 235.175 183.224L293.243 82.6472Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M394.118 194.257C395.112 182.973 391.301 169.872 382.688 154.953L324.619 255.53C333.233 270.448 337.044 283.55 336.05 294.834L394.118 194.257Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M235.432 72.0311C216.88 72.0304 202.027 75.5681 190.875 82.6442L132.806 183.221C143.959 176.145 158.812 172.607 177.363 172.608L235.432 72.0311Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M265.59 124.25C276.191 124.251 286.24 127.12 295.737 132.858L237.669 233.435C228.172 227.697 218.123 224.828 207.522 224.827L265.59 124.25Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M295.719 132.859C305.326 138.406 312.78 145.77 318.081 154.95L260.013 255.527C254.712 246.347 247.258 238.983 237.651 233.436L295.719 132.859Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M387.218 217.608C391.227 210.66 393.527 202.874 394.117 194.25L336.049 294.827C335.459 303.451 333.159 311.237 329.15 318.185L387.218 217.608Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M245.211 132.577C248.413 127.03 255.204 124.257 265.584 124.258L207.516 224.835C197.136 224.834 190.345 227.607 187.143 233.154L245.211 132.577Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M318.094 154.945C322.842 163.17 324.002 171.107 321.573 178.757L263.505 279.334C265.934 271.684 264.774 263.746 260.026 255.522L318.094 154.945Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M176.925 96.6737C180.127 91.1249 184.776 86.4503 190.871 82.6499L132.803 183.227C126.708 187.027 122.059 191.702 118.857 197.25L176.925 96.6737Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M387.226 217.606C385.989 219.749 384.59 221.813 383.028 223.797L324.96 324.373C326.522 322.39 327.921 320.326 329.157 318.183L387.226 217.606Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M317.269 188.408C319.087 185.262 320.519 182.045 321.562 178.758L263.494 279.335C262.451 282.622 261.019 285.839 259.201 288.985L317.269 188.408Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M245.208 132.573C241.895 137.928 243 145.387 248.522 154.95L190.454 255.527C184.932 245.964 183.827 238.505 187.14 233.15L245.208 132.573Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M176.93 96.6719C174.331 101.175 172.686 106.255 171.993 111.91L113.925 212.487C114.618 206.831 116.263 201.752 118.862 197.249L176.93 96.6719Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M317.266 188.413C314.853 192.589 311.757 196.64 307.978 200.566L249.91 301.143C253.689 297.216 256.785 293.166 259.198 288.99L317.266 188.413Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M464.198 304.708L435.375 254.789L377.307 355.366L406.13 405.285L464.198 304.708Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M353.209 254.787C366.68 242.548 376.618 232.22 383.023 223.805L324.955 324.382C318.55 332.797 308.612 343.124 295.141 355.364L353.209 254.787Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M435.37 254.787L353.212 254.784L295.144 355.361L377.302 355.364L435.37 254.787Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M183.921 154.947L248.521 154.95L190.453 255.527L125.853 255.524L183.921 154.947Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M171.992 111.914C170.668 124.537 174.643 138.881 183.92 154.947L125.852 255.524C116.575 239.458 112.599 225.114 113.924 212.491L171.992 111.914Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M307.987 200.562C301.251 207.256 291.203 216.244 277.842 227.528L219.774 328.105C233.135 316.821 243.183 307.832 249.919 301.139L307.987 200.562Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M15.5469 75.1797L44.5359 125.386L-13.5321 225.963L-42.5212 175.756L15.5469 75.1797Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M277.836 227.536C264.033 238.82 253.708 247.904 246.862 254.789L188.794 355.366C195.64 348.481 205.965 339.397 219.768 328.113L277.836 227.536Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M275.358 304.706L464.189 304.713L406.12 405.29L217.29 405.283L275.358 304.706Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M44.5279 125.39L67.3864 125.39L9.31834 225.967L-13.5401 225.966L44.5279 125.39Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M101.341 75.1911L233.863 304.705L175.795 405.282L43.2733 175.768L101.341 75.1911ZM15.5431 75.19L-42.525 175.767L43.277 175.77L101.345 75.1932L15.5431 75.19Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M246.866 254.784L246.534 254.784L188.466 355.361L188.798 355.361L246.866 254.784Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M246.539 254.781L275.362 304.701L217.294 405.277L188.471 355.358L246.539 254.781Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M67.3906 125.391L170.923 304.698L112.855 405.275L9.32257 225.967L67.3906 125.391Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                    <path
+                                        d="M170.921 304.699L233.865 304.701L175.797 405.278L112.853 405.276L170.921 304.699Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="bevel"
+                                    />
+                                </g>
+                                <g
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                >
+                                    <path
+                                        d="M246.544 254.79L246.875 254.79C253.722 247.905 264.046 238.82 277.849 227.537C291.21 216.253 301.259 207.264 307.995 200.57C314.62 193.685 319.147 186.418 321.577 178.768C324.006 171.117 322.846 163.18 318.097 154.956C312.796 145.775 305.342 138.412 295.735 132.865C286.238 127.127 276.189 124.258 265.588 124.257C255.208 124.257 248.416 127.03 245.214 132.576C241.902 137.931 243.006 145.39 248.528 154.953L183.928 154.951C174.652 138.885 170.676 124.541 172 111.918C173.546 99.2946 179.84 89.5408 190.882 82.6559C202.035 75.5798 216.887 72.0421 235.439 72.0428C254.874 72.0435 274.144 75.5825 293.248 82.6598C312.242 89.5457 329.579 99.3005 345.261 111.924C360.942 124.548 373.421 138.892 382.697 154.958C391.311 169.877 395.121 182.978 394.128 194.262C393.355 205.546 389.656 215.396 383.031 223.811C376.627 232.226 366.688 242.554 353.217 254.794L435.375 254.797L464.198 304.716L275.367 304.709L246.544 254.79Z"
+                                        fill="#4B0600"
+                                    />
+                                    <path
+                                        d="M246.544 254.79L246.875 254.79C253.722 247.905 264.046 238.82 277.849 227.537C291.21 216.253 301.259 207.264 307.995 200.57C314.62 193.685 319.147 186.418 321.577 178.768C324.006 171.117 322.846 163.18 318.097 154.956C312.796 145.775 305.342 138.412 295.735 132.865C286.238 127.127 276.189 124.258 265.588 124.257C255.208 124.257 248.416 127.03 245.214 132.576C241.902 137.931 243.006 145.39 248.528 154.953L183.928 154.951C174.652 138.885 170.676 124.541 172 111.918C173.546 99.2946 179.84 89.5408 190.882 82.6559C202.035 75.5798 216.887 72.0421 235.439 72.0428C254.874 72.0435 274.144 75.5825 293.248 82.6598C312.242 89.5457 329.579 99.3005 345.261 111.924C360.942 124.548 373.421 138.892 382.697 154.958C391.311 169.877 395.121 182.978 394.128 194.262C393.355 205.546 389.656 215.396 383.031 223.811C376.627 232.226 366.688 242.554 353.217 254.794L435.375 254.797L464.198 304.716L275.367 304.709L246.544 254.79Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                        strokeLinejoin="round"
+                                    />
+                                </g>
+                                <g
+                                    className="translate-y-0 opacity-100 transition-all delay-300 duration-750 starting:translate-y-4 starting:opacity-0"
+                                    style={{ mixBlendMode: 'hard-light' }}
+                                >
+                                    <path
+                                        d="M67.41 125.402L44.5515 125.401L15.5625 75.1953L101.364 75.1985L233.886 304.712L170.942 304.71L67.41 125.402Z"
+                                        fill="#4B0600"
+                                    />
+                                    <path
+                                        d="M67.41 125.402L44.5515 125.401L15.5625 75.1953L101.364 75.1985L233.886 304.712L170.942 304.71L67.41 125.402Z"
+                                        stroke="#FF750F"
+                                        strokeWidth={1}
+                                    />
+                                </g>
+                            </svg>
+                            <div className="absolute inset-0 rounded-t-lg shadow-[inset_0px_0px_0px_1px_rgba(26,26,0,0.16)] lg:rounded-t-none lg:rounded-r-lg dark:shadow-[inset_0px_0px_0px_1px_#fffaed2d]" />
+                        </div>
+                    </main>
+                </div>
+                <div className="hidden h-14.5 lg:block"></div>
+            </div>
+        </>
+    );
+}
Index: resources/js/ssr.tsx
===================================================================
--- resources/js/ssr.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/ssr.tsx	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,30 @@
+import { createInertiaApp } from '@inertiajs/react';
+import createServer from '@inertiajs/react/server';
+import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
+import ReactDOMServer from 'react-dom/server';
+import { type RouteName, route } from 'ziggy-js';
+
+const appName = import.meta.env.VITE_APP_NAME || 'Laravel';
+
+createServer((page) =>
+    createInertiaApp({
+        page,
+        render: ReactDOMServer.renderToString,
+        title: (title) => `${title} - ${appName}`,
+        resolve: (name) => resolvePageComponent(`./pages/${name}.tsx`, import.meta.glob('./pages/**/*.tsx')),
+        setup: ({ App, props }) => {
+            /* eslint-disable */
+            // @ts-expect-error
+            global.route<RouteName> = (name, params, absolute) =>
+                route(name, params as any, absolute, {
+                    // @ts-expect-error
+                    ...page.props.ziggy,
+                    // @ts-expect-error
+                    location: new URL(page.props.ziggy.location),
+                });
+            /* eslint-enable */
+
+            return <App {...props} />;
+        },
+    }),
+);
Index: resources/js/types/global.d.ts
===================================================================
--- resources/js/types/global.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/types/global.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,5 @@
+import type { route as routeFn } from 'ziggy-js';
+
+declare global {
+    const route: typeof routeFn;
+}
Index: resources/js/types/index.d.ts
===================================================================
--- resources/js/types/index.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/types/index.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,43 @@
+import { LucideIcon } from 'lucide-react';
+import type { Config } from 'ziggy-js';
+
+export interface Auth {
+    user: User;
+}
+
+export interface BreadcrumbItem {
+    title: string;
+    href: string;
+}
+
+export interface NavGroup {
+    title: string;
+    items: NavItem[];
+}
+
+export interface NavItem {
+    title: string;
+    href: string;
+    icon?: LucideIcon | null;
+    isActive?: boolean;
+}
+
+export interface SharedData {
+    name: string;
+    quote: { message: string; author: string };
+    auth: Auth;
+    ziggy: Config & { location: string };
+    sidebarOpen: boolean;
+    [key: string]: unknown;
+}
+
+export interface User {
+    id: number;
+    name: string;
+    email: string;
+    avatar?: string;
+    email_verified_at: string | null;
+    created_at: string;
+    updated_at: string;
+    [key: string]: unknown; // This allows for additional properties...
+}
Index: resources/js/types/vite-env.d.ts
===================================================================
--- resources/js/types/vite-env.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/js/types/vite-env.d.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,1 @@
+/// <reference types="vite/client" />
Index: sources/views/admin/study-programs/create.blade.php
===================================================================
--- resources/views/admin/study-programs/create.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,170 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-4xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-2xl text-gray-900 mb-6">Креирај нова студиска програма</h2>
-
-                <form method="POST" action="{{ route('study-programs.store') }}" class="space-y-6">
-                    @csrf
-
-                    <!-- Names -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="name_mk" class="block text-sm font-bold text-gray-900 mb-2">Име (Македонски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name_mk" name="name_mk" value="{{ old('name_mk') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="name_en" class="block text-sm font-bold text-gray-900 mb-2">Име (Англиски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name_en" name="name_en" value="{{ old('name_en') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name_en') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Code and Duration -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="code" class="block text-sm font-bold text-gray-900 mb-2">Код <span class="text-red-500">*</span></label>
-                            <input type="text" id="code" name="code" value="{{ old('code') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('code') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="duration_years" class="block text-sm font-bold text-gray-900 mb-2">Трајање (години) <span class="text-red-500">*</span></label>
-                            <select id="duration_years" name="duration_years" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="1" {{ old('duration_years') == '1' ? 'selected' : '' }}>1 година</option>
-                                <option value="2" {{ old('duration_years') == '2' ? 'selected' : '' }}>2 години</option>
-                                <option value="3" {{ old('duration_years') == '3' ? 'selected' : '' }}>3 години</option>
-                                <option value="4" {{ old('duration_years') == '4' ? 'selected' : '' }}>4 години</option>
-                                <option value="5" {{ old('duration_years') == '5' ? 'selected' : '' }}>5 години</option>
-                                <option value="6" {{ old('duration_years') == '6' ? 'selected' : '' }}>6 години</option>
-                            </select>
-                            @error('duration_years') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="cycle" class="block text-sm font-bold text-gray-900 mb-2">Циклус <span class="text-red-500">*</span></label>
-                            <select id="cycle" name="cycle" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="first" {{ old('cycle') == 'first' ? 'selected' : '' }}>Прв циклус</option>
-                                <option value="second" {{ old('cycle') == 'second' ? 'selected' : '' }}>Втор циклус</option>
-                            </select>
-                            @error('cycle') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Descriptions -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="description_mk" class="block text-sm font-bold text-gray-900 mb-2">Опис (Македонски)</label>
-                            <textarea id="description_mk" name="description_mk" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_mk') }}</textarea>
-                            @error('description_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="description_en" class="block text-sm font-bold text-gray-900 mb-2">Опис (Англиски)</label>
-                            <textarea id="description_en" name="description_en" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_en') }}</textarea>
-                            @error('description_en') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Subjects -->
-                    <div>
-                        <label class="block text-sm font-bold text-gray-900 mb-2">Предмети</label>
-                        <div id="subjectsContainer" class="space-y-2">
-                            <div class="grid grid-cols-12 gap-2 items-end">
-                                <div class="col-span-5">
-                                    <select class="subjectSelect w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subjects[]" data-index="0">
-                                        <option value="">-- Изберете предмет --</option>
-                                        @foreach($subjects as $subject)
-                                            <option value="{{ $subject->id }}">{{ $subject->code }} - {{ $subject->name }}</option>
-                                        @endforeach
-                                    </select>
-                                </div>
-                                <div class="col-span-2">
-                                    <select class="subjectType w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_types[0]">
-                                        <option value="mandatory">Задолж.</option>
-                                        <option value="elective">Изборен</option>
-                                    </select>
-                                </div>
-                                <div class="col-span-2">
-                                    <select class="subjectYear w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_years[0]">
-                                        <option value="1">Година 1</option>
-                                        <option value="2">Година 2</option>
-                                        <option value="3">Година 3</option>
-                                        <option value="4">Година 4</option>
-                                        <option value="5">Година 5</option>
-                                        <option value="6">Година 6</option>
-                                    </select>
-                                </div>
-                                <div class="col-span-2">
-                                    <select class="subjectSemester w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_semesters[0]">
-                                        <option value="winter">Зимски</option>
-                                        <option value="summer">Летен</option>
-                                    </select>
-                                </div>
-                                <button type="button" onclick="removeSubject(this)" class="col-span-1 px-3 py-2 bg-red-100 text-red-700 rounded text-sm font-semibold hover:bg-red-200">Избриши</button>
-                            </div>
-                        </div>
-                        <button type="button" onclick="addSubject()" class="mt-3 px-4 py-2 bg-green-100 text-green-700 rounded text-sm font-semibold hover:bg-green-200">+ Додади предмет</button>
-                    </div>
-
-                    <!-- Buttons -->
-                    <div class="flex justify-between pt-6 border-t">
-                        <a href="{{ route('study-programs.index') }}" class="px-6 py-2 text-gray-700 bg-gray-100 rounded-md hover:bg-gray-200">Откажи</a>
-                        <button type="submit" class="px-6 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700">Креирај програма</button>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script>
-    let subjectCount = 1;
-
-    function addSubject() {
-        const container = document.getElementById('subjectsContainer');
-        const div = document.createElement('div');
-        div.className = 'grid grid-cols-12 gap-2 items-end';
-        div.innerHTML = `
-            <div class="col-span-5">
-                <select class="subjectSelect w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subjects[]" data-index="${subjectCount}">
-                    <option value="">-- Изберете предмет --</option>
-                    @foreach($subjects as $subject)
-                        <option value="{{ $subject->id }}">{{ $subject->code }} - {{ $subject->name }}</option>
-                    @endforeach
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectType w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_types[${subjectCount}]">
-                    <option value="mandatory">Задолж.</option>
-                    <option value="elective">Изборен</option>
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectYear w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_years[${subjectCount}]">
-                    <option value="1">Година 1</option>
-                    <option value="2">Година 2</option>
-                    <option value="3">Година 3</option>
-                    <option value="4">Година 4</option>
-                    <option value="5">Година 5</option>
-                    <option value="6">Година 6</option>
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectSemester w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_semesters[${subjectCount}]">
-                    <option value="winter">Зимски</option>
-                    <option value="summer">Летен</option>
-                </select>
-            </div>
-            <button type="button" onclick="removeSubject(this)" class="col-span-1 px-3 py-2 bg-red-100 text-red-700 rounded text-sm font-semibold hover:bg-red-200">Избриши</button>
-        `;
-        container.appendChild(div);
-        subjectCount++;
-    }
-
-    function removeSubject(button) {
-        button.parentElement.remove();
-    }
-</script>
-</x-app-layout>
Index: sources/views/admin/study-programs/edit.blade.php
===================================================================
--- resources/views/admin/study-programs/edit.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,207 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-4xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-2xl text-gray-900 mb-6">Уреди студиска програма</h2>
-
-                <form method="POST" action="{{ route('study-programs.update', $studyProgram) }}" class="space-y-6">
-                    @csrf
-                    @method('PUT')
-
-                    <!-- Names -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="name_mk" class="block text-sm font-bold text-gray-900 mb-2">Име (Македонски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name_mk" name="name_mk" value="{{ old('name_mk', $studyProgram->name_mk) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="name_en" class="block text-sm font-bold text-gray-900 mb-2">Име (Англиски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name_en" name="name_en" value="{{ old('name_en', $studyProgram->name_en) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name_en') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Code and Duration -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="code" class="block text-sm font-bold text-gray-900 mb-2">Код <span class="text-red-500">*</span></label>
-                            <input type="text" id="code" name="code" value="{{ old('code', $studyProgram->code) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('code') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="duration_years" class="block text-sm font-bold text-gray-900 mb-2">Времетраење (години) <span class="text-red-500">*</span></label>
-                            <select id="duration_years" name="duration_years" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="1" {{ old('duration_years', $studyProgram->duration_years) == '1' ? 'selected' : '' }}>1 година</option>
-                                <option value="2" {{ old('duration_years', $studyProgram->duration_years) == '2' ? 'selected' : '' }}>2 години</option>
-                                <option value="3" {{ old('duration_years', $studyProgram->duration_years) == '3' ? 'selected' : '' }}>3 години</option>
-                                <option value="4" {{ old('duration_years', $studyProgram->duration_years) == '4' ? 'selected' : '' }}>4 години</option>
-                                <option value="5" {{ old('duration_years', $studyProgram->duration_years) == '5' ? 'selected' : '' }}>5 години</option>
-                                <option value="6" {{ old('duration_years', $studyProgram->duration_years) == '6' ? 'selected' : '' }}>6 години</option>
-                            </select>
-                            @error('duration_years') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="cycle" class="block text-sm font-bold text-gray-900 mb-2">Циклус <span class="text-red-500">*</span></label>
-                            <select id="cycle" name="cycle" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="first" {{ old('cycle', $studyProgram->cycle) == 'first' ? 'selected' : '' }}>Прв циклус</option>
-                                <option value="second" {{ old('cycle', $studyProgram->cycle) == 'second' ? 'selected' : '' }}>Втор циклус</option>
-                            </select>
-                            @error('cycle') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Descriptions -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="description_mk" class="block text-sm font-bold text-gray-900 mb-2">Опис (Македонски)</label>
-                            <textarea id="description_mk" name="description_mk" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_mk', $studyProgram->description_mk) }}</textarea>
-                            @error('description_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="description_en" class="block text-sm font-bold text-gray-900 mb-2">Опис (Англиски)</label>
-                            <textarea id="description_en" name="description_en" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_en', $studyProgram->description_en) }}</textarea>
-                            @error('description_en') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Subjects -->
-                    <div>
-                        <label class="block text-sm font-bold text-gray-900 mb-2">Предмети</label>
-                        <div id="subjectsContainer" class="space-y-2">
-                            @forelse($studyProgram->subjects as $index => $subject)
-                                <div class="grid grid-cols-12 gap-2 items-end">
-                                    <div class="col-span-5">
-                                        <select class="subjectSelect w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subjects[]" data-index="{{ $index }}">
-                                            <option value="">-- Изберете предмет --</option>
-                                            @foreach($allSubjects as $s)
-                                                <option value="{{ $s->id }}" {{ $s->id == $subject->id ? 'selected' : '' }}>{{ $s->code }} - {{ $s->name }}</option>
-                                            @endforeach
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectType w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_types[{{ $index }}]">
-                                            <option value="mandatory" {{ $subject->pivot->type === 'mandatory' ? 'selected' : '' }}>Задолж.</option>
-                                            <option value="elective" {{ $subject->pivot->type === 'elective' ? 'selected' : '' }}>Изборен</option>
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectYear w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_years[{{ $index }}]">
-                                            <option value="1" {{ $subject->pivot->year == 1 ? 'selected' : '' }}>Година 1</option>
-                                            <option value="2" {{ $subject->pivot->year == 2 ? 'selected' : '' }}>Година 2</option>
-                                            <option value="3" {{ $subject->pivot->year == 3 ? 'selected' : '' }}>Година 3</option>
-                                            <option value="4" {{ $subject->pivot->year == 4 ? 'selected' : '' }}>Година 4</option>
-                                            <option value="5" {{ $subject->pivot->year == 5 ? 'selected' : '' }}>Година 5</option>
-                                            <option value="6" {{ $subject->pivot->year == 6 ? 'selected' : '' }}>Година 6</option>
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectSemester w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_semesters[{{ $index }}]">
-                                            <option value="winter" {{ $subject->pivot->semester_type === 'winter' ? 'selected' : '' }}>Зимски</option>
-                                            <option value="summer" {{ $subject->pivot->semester_type === 'summer' ? 'selected' : '' }}>Летен</option>
-                                        </select>
-                                    </div>
-                                    <button type="button" onclick="removeSubject(this)" class="col-span-1 px-3 py-2 bg-red-100 text-red-700 rounded text-sm font-semibold hover:bg-red-200">Избриши</button>
-                                </div>
-                            @empty
-                                <div class="grid grid-cols-12 gap-2 items-end">
-                                    <div class="col-span-5">
-                                        <select class="subjectSelect w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subjects[]" data-index="0">
-                                            <option value="">-- Изберете предмет --</option>
-                                            @foreach($allSubjects as $subject)
-                                                <option value="{{ $subject->id }}">{{ $subject->code }} - {{ $subject->name }}</option>
-                                            @endforeach
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectType w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_types[0]">
-                                            <option value="mandatory">Задолж.</option>
-                                            <option value="elective">Изборен</option>
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectYear w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_years[0]">
-                                            <option value="1">Година 1</option>
-                                            <option value="2">Година 2</option>
-                                            <option value="3">Година 3</option>
-                                            <option value="4">Година 4</option>
-                                            <option value="5">Година 5</option>
-                                            <option value="6">Година 6</option>
-                                        </select>
-                                    </div>
-                                    <div class="col-span-2">
-                                        <select class="subjectSemester w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_semesters[0]">
-                                            <option value="winter">Зимски</option>
-                                            <option value="summer">Летен</option>
-                                        </select>
-                                    </div>
-                                    <button type="button" onclick="removeSubject(this)" class="col-span-1 px-3 py-2 bg-red-100 text-red-700 rounded text-sm font-semibold hover:bg-red-200">Избриши</button>
-                                </div>
-                            @endforelse
-                        </div>
-                        <button type="button" onclick="addSubject()" class="mt-3 px-4 py-2 bg-green-100 text-green-700 rounded text-sm font-semibold hover:bg-green-200">+ Додади предмет</button>
-                    </div>
-
-                    <!-- Buttons -->
-                    <div class="flex justify-between pt-6 border-t">
-                        <a href="{{ route('study-programs.index') }}" class="px-6 py-2 text-gray-700 bg-gray-100 rounded-md hover:bg-gray-200">Откажи</a>
-                        <button type="submit" class="px-6 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700">Ажурирај програма</button>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script>
-    let subjectCount = {{ $studyProgram->subjects->count() }};
-
-    function addSubject() {
-        const container = document.getElementById('subjectsContainer');
-        const div = document.createElement('div');
-        div.className = 'grid grid-cols-12 gap-2 items-end';
-        div.innerHTML = `
-            <div class="col-span-5">
-                <select class="subjectSelect w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subjects[]" data-index="${subjectCount}">
-                    <option value="">-- Изберете предмет --</option>
-                    @foreach($allSubjects as $subject)
-                        <option value="{{ $subject->id }}">{{ $subject->code }} - {{ $subject->name }}</option>
-                    @endforeach
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectType w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_types[${subjectCount}]">
-                    <option value="mandatory">Задолж.</option>
-                    <option value="elective">Изборен</option>
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectYear w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_years[${subjectCount}]">
-                    <option value="1">Година 1</option>
-                    <option value="2">Година 2</option>
-                    <option value="3">Година 3</option>
-                    <option value="4">Година 4</option>
-                    <option value="5">Година 5</option>
-                    <option value="6">Година 6</option>
-                </select>
-            </div>
-            <div class="col-span-2">
-                <select class="subjectSemester w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" name="subject_semesters[${subjectCount}]">
-                    <option value="winter">Зимски</option>
-                    <option value="summer">Летен</option>
-                </select>
-            </div>
-            <button type="button" onclick="removeSubject(this)" class="col-span-1 px-3 py-2 bg-red-100 text-red-700 rounded text-sm font-semibold hover:bg-red-200">Избриши</button>
-        `;
-        container.appendChild(div);
-        subjectCount++;
-    }
-
-    function removeSubject(button) {
-        button.parentElement.remove();
-    }
-</script>
-</x-app-layout>
Index: sources/views/admin/study-programs/index.blade.php
===================================================================
--- resources/views/admin/study-programs/index.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,97 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-center mb-6">
-                    <h2 class="font-bold text-2xl text-gray-900">Управување со студиски програми</h2>
-                    <a href="{{ route('study-programs.create') }}" class="inline-flex items-center px-4 py-2 bg-indigo-600 border border-transparent rounded-md font-semibold text-sm text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                        + Додади нова програма
-                    </a>
-                </div>
-
-                <div class="mb-6">
-                    <form action="{{ route('study-programs.index') }}" method="GET" class="flex gap-3">
-                        <input
-                            type="text"
-                            name="search"
-                            placeholder="Пребарај по име или код..."
-                            value="{{ request('search') }}"
-                            class="flex-1 px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
-                        >
-                        <button
-                            type="submit"
-                            class="px-6 py-2 bg-indigo-600 text-white rounded-md font-semibold text-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
-                        >
-                            Пребарај
-                        </button>
-                        @if(request('search'))
-                            <a
-                                href="{{ route('study-programs.index') }}"
-                                class="px-6 py-2 bg-gray-300 text-gray-800 rounded-md font-semibold text-sm hover:bg-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2"
-                            >
-                                Ресетирај
-                            </a>
-                        @endif
-                    </form>
-                </div>
-
-                @if(session('success'))
-                    <div class="mb-4 p-4 bg-green-50 border border-green-200 rounded-lg">
-                        <p class="text-sm text-green-700">{{ session('success') }}</p>
-                    </div>
-                @endif
-
-                <div class="grid grid-cols-1 gap-6">
-                    @forelse($studyPrograms as $program)
-                        <div class="border border-gray-300 rounded-lg p-6 hover:shadow-lg transition">
-                            <div class="flex justify-between items-start mb-4">
-                                <div>
-                                    <h3 class="text-lg font-bold text-gray-900">{{ $program->name_mk }}</h3>
-                                    <p class="text-sm text-gray-600">{{ $program->name_en }} ({{ $program->code }})</p>
-                                    <p class="text-sm text-gray-500 mt-2">{{ $program->duration_years }} години • {{ ucfirst($program->cycle) }} циклус</p>
-                                </div>
-                                <div class="space-x-2">
-                                    <a href="{{ route('study-programs.show', $program) }}" class="inline-block px-3 py-1 bg-blue-100 text-blue-700 rounded text-xs font-semibold hover:bg-blue-200">Преглед</a>
-                                    <a href="{{ route('study-programs.edit', $program) }}" class="inline-block px-3 py-1 bg-yellow-100 text-yellow-700 rounded text-xs font-semibold hover:bg-yellow-200">Уреди</a>
-                                    <form method="POST" action="{{ route('study-programs.destroy', $program) }}" style="display: inline-block;">
-                                        @csrf
-                                        @method('DELETE')
-                                        <button type="submit" onclick="return confirm('Are you sure?')" class="px-3 py-1 bg-red-100 text-red-700 rounded text-xs font-semibold hover:bg-red-200">Избриши</button>
-                                    </form>
-                                </div>
-                            </div>
-                            <div class="mb-3">
-                                <p class="text-sm text-gray-700"><strong>Предмети:</strong> {{ $program->subjects->count() }}</p>
-                                <div class="mt-2 flex flex-wrap gap-2">
-                                    @foreach($program->subjects->take(5) as $subject)
-                                        <span class="px-2 py-1 rounded text-xs font-semibold {{ $subject->pivot->type === 'mandatory' ? 'bg-purple-100 text-purple-800' : 'bg-orange-100 text-orange-800' }}">
-                                            {{ $subject->code }}
-                                        </span>
-                                    @endforeach
-                                    @if($program->subjects->count() > 5)
-                                        <span class="px-2 py-1 rounded text-xs font-semibold bg-gray-100 text-gray-800">
-                                            +{{ $program->subjects->count() - 5 }} повеќе
-                                        </span>
-                                    @endif
-                                </div>
-                            </div>
-                            @if($program->description_mk)
-                                <p class="text-sm text-gray-600 italic">{{ \Illuminate\Support\Str::limit($program->description_mk, 150) }}</p>
-                            @endif
-                        </div>
-                    @empty
-                        <div class="text-center py-12">
-                            <p class="text-gray-500">Нема студиски програми</p>
-                        </div>
-                    @endforelse
-                </div>
-
-                <div class="mt-6">
-                    {{ $studyPrograms->links() }}
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/admin/study-programs/show.blade.php
===================================================================
--- resources/views/admin/study-programs/show.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,105 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-5xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-start mb-6">
-                    <div>
-                        <h2 class="font-bold text-2xl text-gray-900">{{ $studyProgram->name_mk }}</h2>
-                        <p class="text-gray-600">{{ $studyProgram->name_en }} ({{ $studyProgram->code }})</p>
-                        <div class="mt-2 flex gap-3">
-                            <span class="px-3 py-1 bg-blue-100 text-blue-800 rounded text-sm font-semibold">{{ $studyProgram->duration_years }} години</span>
-                            <span class="px-3 py-1 bg-green-100 text-green-800 rounded text-sm font-semibold">{{ ucfirst($studyProgram->cycle) }} циклус</span>
-                        </div>
-                    </div>
-                    <div class="space-x-2">
-                        <a href="{{ route('study-programs.edit', $studyProgram) }}" class="inline-block px-4 py-2 bg-yellow-100 text-yellow-700 rounded font-semibold hover:bg-yellow-200">Уреди</a>
-                        <form method="POST" action="{{ route('study-programs.destroy', $studyProgram) }}" style="display: inline-block;">
-                            @csrf
-                            @method('DELETE')
-                            <button type="submit" onclick="return confirm('Are you sure?')" class="px-4 py-2 bg-red-100 text-red-700 rounded font-semibold hover:bg-red-200">Избриши</button>
-                        </form>
-                        <a href="{{ route('study-programs.index') }}" class="inline-block px-4 py-2 bg-gray-100 text-gray-700 rounded font-semibold hover:bg-gray-200">Назад</a>
-                    </div>
-                </div>
-
-                @if($studyProgram->description_mk)
-                    <div class="mb-6 p-4 bg-gray-50 rounded border border-gray-200">
-                        <p class="text-gray-700">{{ $studyProgram->description_mk }}</p>
-                    </div>
-                @endif
-
-                <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
-                    <!-- Mandatory Subjects -->
-                    <div>
-                        <h3 class="text-lg font-bold text-gray-900 mb-4">Задолжителни предмети ({{ $mandatorySubjects->count() }})</h3>
-                        <div class="space-y-2">
-                            @forelse($mandatorySubjects as $subject)
-                                <div class="p-3 bg-purple-50 border border-purple-200 rounded">
-                                    <div class="flex justify-between items-start">
-                                        <div>
-                                            <p class="font-semibold text-gray-900">{{ $subject->code }}</p>
-                                            <p class="text-sm text-gray-600">{{ $subject->name }}</p>
-                                            <p class="text-xs text-gray-500 mt-1">
-                                                Година {{ $subject->pivot->year }} •
-                                                {{ $subject->pivot->semester_type === 'winter' ? 'Зимски' : 'Летен' }} семестар •
-                                                {{ $subject->credits }} ECTS
-                                            </p>
-                                        </div>
-                                    </div>
-                                </div>
-                            @empty
-                                <p class="text-gray-500 text-sm">Нема задолжителни предмети</p>
-                            @endforelse
-                        </div>
-                    </div>
-
-                    <!-- Elective Subjects -->
-                    <div>
-                        <h3 class="text-lg font-bold text-gray-900 mb-4">Изборни предмети ({{ $electiveSubjects->count() }})</h3>
-                        <div class="space-y-2">
-                            @forelse($electiveSubjects as $subject)
-                                <div class="p-3 bg-orange-50 border border-orange-200 rounded">
-                                    <div class="flex justify-between items-start">
-                                        <div>
-                                            <p class="font-semibold text-gray-900">{{ $subject->code }}</p>
-                                            <p class="text-sm text-gray-600">{{ $subject->name }}</p>
-                                            <p class="text-xs text-gray-500 mt-1">
-                                                Година {{ $subject->pivot->year }} •
-                                                {{ $subject->pivot->semester_type === 'winter' ? 'Зимски' : 'Летен' }} семестар •
-                                                {{ $subject->credits }} ECTS
-                                            </p>
-                                        </div>
-                                    </div>
-                                </div>
-                            @empty
-                                <p class="text-gray-500 text-sm">Нема изборни предмети</p>
-                            @endforelse
-                        </div>
-                    </div>
-                </div>
-
-                <!-- Statistics -->
-                <div class="mt-8 grid grid-cols-1 md:grid-cols-4 gap-4">
-                    <div class="p-4 bg-gray-50 rounded border border-gray-200">
-                        <p class="text-gray-600 text-sm">Вкупно предмети</p>
-                        <p class="text-2xl font-bold text-gray-900">{{ $studyProgram->subjects->count() }}</p>
-                    </div>
-                    <div class="p-4 bg-purple-50 rounded border border-purple-200">
-                        <p class="text-gray-600 text-sm">Задолжителни</p>
-                        <p class="text-2xl font-bold text-purple-900">{{ $mandatorySubjects->count() }}</p>
-                    </div>
-                    <div class="p-4 bg-orange-50 rounded border border-orange-200">
-                        <p class="text-gray-600 text-sm">Изборни</p>
-                        <p class="text-2xl font-bold text-orange-900">{{ $electiveSubjects->count() }}</p>
-                    </div>
-                    <div class="p-4 bg-blue-50 rounded border border-blue-200">
-                        <p class="text-gray-600 text-sm">Вкупно ECTS</p>
-                        <p class="text-2xl font-bold text-blue-900">{{ $studyProgram->subjects->sum('credits') }}</p>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/admin/subjects/create.blade.php
===================================================================
--- resources/views/admin/subjects/create.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,122 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-3xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-2xl text-gray-900 mb-6">Додај нов предмет</h2>
-
-                <form method="POST" action="{{ route('subjects.store') }}" class="space-y-6">
-                    @csrf
-
-                    <!-- Code and Name -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="code" class="block text-sm font-bold text-gray-900 mb-2">Код <span class="text-red-500">*</span></label>
-                            <input type="text" id="code" name="code" value="{{ old('code') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('code') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="credits" class="block text-sm font-bold text-gray-900 mb-2">ECTS <span class="text-red-500">*</span></label>
-                            <input type="number" id="credits" name="credits" value="{{ old('credits') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="1" max="60" required>
-                            @error('credits') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Names -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="name" class="block text-sm font-bold text-gray-900 mb-2">Име (Англиски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name" name="name" value="{{ old('name') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="name_mk" class="block text-sm font-bold text-gray-900 mb-2">Име (Македонски)</label>
-                            <input type="text" id="name_mk" name="name_mk" value="{{ old('name_mk') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                            @error('name_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Descriptions -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="description" class="block text-sm font-bold text-gray-900 mb-2">Опис (Англиски)</label>
-                            <textarea id="description" name="description" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description') }}</textarea>
-                            @error('description') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="description_mk" class="block text-sm font-bold text-gray-900 mb-2">Опис (Македонски)</label>
-                            <textarea id="description_mk" name="description_mk" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_mk') }}</textarea>
-                            @error('description_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Year and Semester -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="year" class="block text-sm font-bold text-gray-900 mb-2">Година <span class="text-red-500">*</span></label>
-                            <select id="year" name="year" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="1" {{ old('year') == '1' ? 'selected' : '' }}>1-ва година</option>
-                                <option value="2" {{ old('year') == '2' ? 'selected' : '' }}>2-ра година</option>
-                                <option value="3" {{ old('year') == '3' ? 'selected' : '' }}>3-та година</option>
-                                <option value="4" {{ old('year') == '4' ? 'selected' : '' }}>4-та година</option>
-                            </select>
-                            @error('year') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="semester_type" class="block text-sm font-bold text-gray-900 mb-2">Семестар <span class="text-red-500">*</span></label>
-                            <select id="semester_type" name="semester_type" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="winter" {{ old('semester_type') == 'winter' ? 'selected' : '' }}>Зимски</option>
-                                <option value="summer" {{ old('semester_type') == 'summer' ? 'selected' : '' }}>Летен</option>
-                            </select>
-                            @error('semester_type') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="subject_type" class="block text-sm font-bold text-gray-900 mb-2">Тип <span class="text-red-500">*</span></label>
-                            <select id="subject_type" name="subject_type" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="mandatory" {{ old('subject_type') == 'mandatory' ? 'selected' : '' }}>Задолжителен</option>
-                                <option value="elective" {{ old('subject_type') == 'elective' ? 'selected' : '' }}>Изборен</option>
-                            </select>
-                            @error('subject_type') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Hours -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="total_hours" class="block text-sm font-bold text-gray-900 mb-2">Вкупно часови</label>
-                            <input type="number" id="total_hours" name="total_hours" value="{{ old('total_hours') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('total_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="lecture_hours" class="block text-sm font-bold text-gray-900 mb-2">Часови предавања</label>
-                            <input type="number" id="lecture_hours" name="lecture_hours" value="{{ old('lecture_hours') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('lecture_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="practice_hours" class="block text-sm font-bold text-gray-900 mb-2">Часови вежби</label>
-                            <input type="number" id="practice_hours" name="practice_hours" value="{{ old('practice_hours') }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('practice_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Instructors -->
-                    <div>
-                        <label for="instructors" class="block text-sm font-bold text-gray-900 mb-2">Професори</label>
-                        <input type="text" id="instructors" name="instructors" value="{{ old('instructors') }}" placeholder="Име1, Име2" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                        @error('instructors') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                    </div>
-
-                    <!-- Buttons -->
-                    <div class="flex justify-between pt-6 border-t">
-                        <a href="{{ route('subjects.index') }}" class="px-6 py-2 text-gray-700 bg-gray-100 rounded-md hover:bg-gray-200">Откажи</a>
-                        <button type="submit" class="px-6 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700">Создади предмет</button>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/admin/subjects/edit.blade.php
===================================================================
--- resources/views/admin/subjects/edit.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,174 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-3xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-2xl text-gray-900 mb-6">Уреди предмет</h2>
-
-                <form method="POST" action="{{ route('subjects.update', $subject) }}" class="space-y-6">
-                    @csrf
-                    @method('PUT')
-
-                    <!-- Code and Name -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="code" class="block text-sm font-bold text-gray-900 mb-2">Код <span class="text-red-500">*</span></label>
-                            <input type="text" id="code" name="code" value="{{ old('code', $subject->code) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('code') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="credits" class="block text-sm font-bold text-gray-900 mb-2">ECTS <span class="text-red-500">*</span></label>
-                            <input type="number" id="credits" name="credits" value="{{ old('credits', $subject->credits) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="1" max="60" required>
-                            @error('credits') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Names -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="name" class="block text-sm font-bold text-gray-900 mb-2">Име (Англиски) <span class="text-red-500">*</span></label>
-                            <input type="text" id="name" name="name" value="{{ old('name', $subject->name) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                            @error('name') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="name_mk" class="block text-sm font-bold text-gray-900 mb-2">Име (Македонски)</label>
-                            <input type="text" id="name_mk" name="name_mk" value="{{ old('name_mk', $subject->name_mk) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                            @error('name_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Descriptions -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                        <div>
-                            <label for="description" class="block text-sm font-bold text-gray-900 mb-2">Опис (Англиски)</label>
-                            <textarea id="description" name="description" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description', $subject->description) }}</textarea>
-                            @error('description') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="description_mk" class="block text-sm font-bold text-gray-900 mb-2">Опис (Македонски)</label>
-                            <textarea id="description_mk" name="description_mk" rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old('description_mk', $subject->description_mk) }}</textarea>
-                            @error('description_mk') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Year and Semester -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="year" class="block text-sm font-bold text-gray-900 mb-2">Година <span class="text-red-500">*</span></label>
-                            <select id="year" name="year" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="1" {{ old('year', $subject->year) == '1' ? 'selected' : '' }}>1-ва година</option>
-                                <option value="2" {{ old('year', $subject->year) == '2' ? 'selected' : '' }}>2-ра година</option>
-                                <option value="3" {{ old('year', $subject->year) == '3' ? 'selected' : '' }}>3-та година</option>
-                                <option value="4" {{ old('year', $subject->year) == '4' ? 'selected' : '' }}>4-та година</option>
-                            </select>
-                            @error('year') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="semester_type" class="block text-sm font-bold text-gray-900 mb-2">Семестар <span class="text-red-500">*</span></label>
-                            <select id="semester_type" name="semester_type" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="winter" {{ old('semester_type', $subject->semester_type) == 'winter' ? 'selected' : '' }}>Зимски</option>
-                                <option value="summer" {{ old('semester_type', $subject->semester_type) == 'summer' ? 'selected' : '' }}>Летен</option>
-                            </select>
-                            @error('semester_type') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="subject_type" class="block text-sm font-bold text-gray-900 mb-2">Тип <span class="text-red-500">*</span></label>
-                            <select id="subject_type" name="subject_type" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" required>
-                                <option value="">-- Изберете --</option>
-                                <option value="mandatory" {{ old('subject_type', $subject->subject_type) == 'mandatory' ? 'selected' : '' }}>Задолжителен</option>
-                                <option value="elective" {{ old('subject_type', $subject->subject_type) == 'elective' ? 'selected' : '' }}>Изборен</option>
-                            </select>
-                            @error('subject_type') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Hours -->
-                    <div class="grid grid-cols-1 gap-6 md:grid-cols-3">
-                        <div>
-                            <label for="total_hours" class="block text-sm font-bold text-gray-900 mb-2">Вкупно часови</label>
-                            <input type="number" id="total_hours" name="total_hours" value="{{ old('total_hours', $subject->total_hours) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('total_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="lecture_hours" class="block text-sm font-bold text-gray-900 mb-2">Часови предавања</label>
-                            <input type="number" id="lecture_hours" name="lecture_hours" value="{{ old('lecture_hours', $subject->lecture_hours) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('lecture_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                        <div>
-                            <label for="practice_hours" class="block text-sm font-bold text-gray-900 mb-2">Часови вежби</label>
-                            <input type="number" id="practice_hours" name="practice_hours" value="{{ old('practice_hours', $subject->practice_hours) }}" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500" min="0">
-                            @error('practice_hours') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                        </div>
-                    </div>
-
-                    <!-- Instructors -->
-                    <div>
-                        <label for="instructors" class="block text-sm font-bold text-gray-900 mb-2">Професори</label>
-                        <input type="text" id="instructors" name="instructors" value="{{ old('instructors', $subject->instructors) }}" placeholder="Име1, Име2" class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                        @error('instructors') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                    </div>
-
-                    <!-- Career Paths -->
-                    <div>
-                        <label for="career_paths" class="block text-sm font-bold text-gray-900 mb-2">Патеки на развој</label>
-                        <select id="career_paths" name="career_paths[]" multiple class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                            @foreach($careerPaths as $careerPath)
-                                <option value="{{ $careerPath->id }}" {{ $subject->careerPaths->contains($careerPath->id) ? 'selected' : '' }}>
-                                    {{ $careerPath->name }}
-                                </option>
-                            @endforeach
-                        </select>
-                        <p class="text-gray-500 text-sm mt-1">Задржите Ctrl/Cmd за да изберете повеќе (само за изборни предмети)</p>
-                        @error('career_paths') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                    </div>
-
-                    <!-- Prerequisites -->
-                    <div>
-                        <label for="prerequisites" class="block text-sm font-bold text-gray-900 mb-2">Предуслови</label>
-                        <div class="mb-3">
-                            <input
-                                type="text"
-                                id="prerequisitesSearch"
-                                placeholder="Пребарај по имена или код..."
-                                class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500"
-                            >
-                        </div>
-                        <select id="prerequisites" name="prerequisites[]" multiple class="w-full px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
-                            @foreach($prerequisites as $prereq)
-                                <option value="{{ $prereq->id }}" data-search="{{ strtolower($prereq->code . ' ' . $prereq->name . ' ' . $prereq->name_mk) }}" {{ $subject->prerequisites->contains($prereq->id) ? 'selected' : '' }}>
-                                    {{ $prereq->code }} - {{ $prereq->name }}
-                                </option>
-                            @endforeach
-                        </select>
-                        <p class="text-gray-500 text-sm mt-1">Задржите Ctrl/Cmd за да изберете повеќе</p>
-                        @error('prerequisites') <p class="text-red-500 text-sm mt-1">{{ $message }}</p> @enderror
-                    </div>
-
-                    <script>
-                        document.getElementById('prerequisitesSearch').addEventListener('input', function(e) {
-                            const searchTerm = e.target.value.toLowerCase();
-                            const options = document.querySelectorAll('#prerequisites option');
-
-                            options.forEach(option => {
-                                if (searchTerm === '' || option.dataset.search.includes(searchTerm)) {
-                                    option.style.display = '';
-                                } else {
-                                    option.style.display = 'none';
-                                }
-                            });
-                        });
-                    </script>
-
-                    <!-- Buttons -->
-                    <div class="flex justify-between pt-6 border-t">
-                        <a href="{{ route('subjects.index') }}" class="px-6 py-2 text-gray-700 bg-gray-100 rounded-md hover:bg-gray-200">Откажи</a>
-                        <button type="submit" class="px-6 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700">Ажурирај предмет</button>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/admin/subjects/index.blade.php
===================================================================
--- resources/views/admin/subjects/index.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,106 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-center mb-6">
-                    <h2 class="font-bold text-2xl text-gray-900">Управување со предмети</h2>
-                    <a href="{{ route('subjects.create') }}" class="inline-flex items-center px-4 py-2 bg-indigo-600 border border-transparent rounded-md font-semibold text-sm text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                        + Додади нов предмет
-                    </a>
-                </div>
-
-                <div class="mb-6">
-                    <form action="{{ route('subjects.index') }}" method="GET" class="flex gap-3">
-                        <input
-                            type="text"
-                            name="search"
-                            placeholder="Пребарај по име на предмет или код..."
-                            value="{{ request('search') }}"
-                            class="flex-1 px-4 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
-                        >
-                        <button
-                            type="submit"
-                            class="px-6 py-2 bg-indigo-600 text-white rounded-md font-semibold text-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
-                        >
-                            Пребарај
-                        </button>
-                        @if(request('search'))
-                            <a
-                                href="{{ route('subjects.index') }}"
-                                class="px-6 py-2 bg-gray-300 text-gray-800 rounded-md font-semibold text-sm hover:bg-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2"
-                            >
-                                Ресетирај
-                            </a>
-                        @endif
-                    </form>
-                </div>
-
-
-
-                @if(session('success'))
-                    <div class="mb-4 p-4 bg-green-50 border border-green-200 rounded-lg">
-                        <p class="text-sm text-green-700">{{ session('success') }}</p>
-                    </div>
-                @endif
-
-
-                <div class="overflow-x-auto">
-                    <table class="min-w-full border-collapse border border-gray-300">
-                        <thead class="bg-gray-100">
-                            <tr>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Код</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Име (EN)</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Име (MK)</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Година</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Семестар</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">Тип</th>
-                                <th class="border border-gray-300 px-4 py-2 text-left text-sm font-bold text-gray-900">ECTS</th>
-                                <th class="border border-gray-300 px-4 py-2 text-center text-sm font-bold text-gray-900">Акции</th>
-                            </tr>
-                        </thead>
-                        <tbody>
-                            @forelse($subjects as $subject)
-                                <tr class="hover:bg-gray-50">
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-900 font-mono">{{ $subject->code }}</td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-900">{{ $subject->name }}</td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-600">{{ $subject->name_mk }}</td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-900 text-center">{{ $subject->year }}</td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-900">
-                                        <span class="px-2 py-1 rounded text-xs font-semibold {{ $subject->semester_type === 'winter' ? 'bg-blue-100 text-blue-800' : 'bg-green-100 text-green-800' }}">
-                                            {{ $subject->semester_type === 'winter' ? 'Зимски' : 'Летен' }}
-                                        </span>
-                                    </td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm">
-                                        <span class="px-2 py-1 rounded text-xs font-semibold {{ $subject->subject_type === 'mandatory' ? 'bg-purple-100 text-purple-800' : 'bg-orange-100 text-orange-800' }}">
-                                            {{ $subject->subject_type === 'mandatory' ? 'Задолж.' : 'Изборен' }}
-                                        </span>
-                                    </td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-gray-900 text-center">{{ $subject->credits }}</td>
-                                    <td class="border border-gray-300 px-4 py-2 text-sm text-center space-x-2">
-                                        <a href="{{ route('subjects.show', $subject) }}" class="inline-block px-3 py-1 bg-blue-100 text-blue-700 rounded text-xs font-semibold hover:bg-blue-200">Преглед</a>
-                                        <a href="{{ route('subjects.edit', $subject) }}" class="inline-block px-3 py-1 bg-yellow-100 text-yellow-700 rounded text-xs font-semibold hover:bg-yellow-200">Уреди</a>
-                                        <form method="POST" action="{{ route('subjects.destroy', $subject) }}" style="display: inline-block;">
-                                            @csrf
-                                            @method('DELETE')
-                                            <button type="submit" onclick="return confirm('Are you sure?')" class="px-3 py-1 bg-red-100 text-red-700 rounded text-xs font-semibold hover:bg-red-200">Избриши</button>
-                                        </form>
-                                    </td>
-                                </tr>
-                            @empty
-                                <tr>
-                                    <td colspan="8" class="border border-gray-300 px-4 py-4 text-center text-gray-500">Нема предмети</td>
-                                </tr>
-                            @endforelse
-                        </tbody>
-                    </table>
-                </div>
-
-                <div class="mt-6">
-                    {{ $subjects->links() }}
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/admin/subjects/show.blade.php
===================================================================
--- resources/views/admin/subjects/show.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,102 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-3xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-start mb-6">
-                    <div>
-                        <h2 class="font-bold text-2xl text-gray-900">{{ $subject->name }}</h2>
-                        <p class="text-gray-600 mt-1">{{ $subject->name_mk }}</p>
-                    </div>
-                    <div class="space-x-2">
-                        <a href="{{ route('subjects.edit', $subject) }}" class="inline-block px-4 py-2 bg-yellow-600 text-white rounded-md hover:bg-yellow-700">Уреди</a>
-                        <a href="{{ route('subjects.index') }}" class="inline-block px-4 py-2 bg-gray-600 text-white rounded-md hover:bg-gray-700">Назад</a>
-                    </div>
-                </div>
-
-                <div class="grid grid-cols-2 gap-4 mb-6">
-                    <div class="bg-blue-50 p-4 rounded-lg border border-blue-200">
-                        <p class="text-sm text-gray-600">Код</p>
-                        <p class="font-bold text-lg text-gray-900 font-mono">{{ $subject->code }}</p>
-                    </div>
-                    <div class="bg-green-50 p-4 rounded-lg border border-green-200">
-                        <p class="text-sm text-gray-600">ECTS кредити</p>
-                        <p class="font-bold text-lg text-gray-900">{{ $subject->credits }}</p>
-                    </div>
-                    <div class="bg-purple-50 p-4 rounded-lg border border-purple-200">
-                        <p class="text-sm text-gray-600">Година</p>
-                        <p class="font-bold text-lg text-gray-900">{{ $subject->year }}-та година</p>
-                    </div>
-                    <div class="bg-orange-50 p-4 rounded-lg border border-orange-200">
-                        <p class="text-sm text-gray-600">Семестар</p>
-                        <p class="font-bold text-lg text-gray-900">{{ $subject->semester_type === 'winter' ? 'Зимски' : 'Летен' }}</p>
-                    </div>
-                </div>
-
-                <div class="bg-gray-50 p-4 rounded-lg border border-gray-200 mb-6">
-                    <p class="text-sm font-semibold text-gray-700 mb-2">Тип:</p>
-                    <span class="px-3 py-1 rounded-full text-sm font-semibold {{ $subject->subject_type === 'mandatory' ? 'bg-red-100 text-red-800' : 'bg-blue-100 text-blue-800' }}">
-                        {{ $subject->subject_type === 'mandatory' ? 'Задолжителен' : 'Изборен' }}
-                    </span>
-                </div>
-
-                @if($subject->description)
-                    <div class="mb-6">
-                        <h3 class="font-bold text-lg text-gray-900 mb-2">Опис (Англиски)</h3>
-                        <p class="text-gray-700">{{ $subject->description }}</p>
-                    </div>
-                @endif
-
-                @if($subject->description_mk)
-                    <div class="mb-6">
-                        <h3 class="font-bold text-lg text-gray-900 mb-2">Опис (Македонски)</h3>
-                        <p class="text-gray-700">{{ $subject->description_mk }}</p>
-                    </div>
-                @endif
-
-                <div class="grid grid-cols-3 gap-4 mb-6">
-                    @if($subject->total_hours)
-                        <div class="bg-gray-50 p-4 rounded-lg border border-gray-200">
-                            <p class="text-sm text-gray-600">Вкупно часови</p>
-                            <p class="font-bold text-lg text-gray-900">{{ $subject->total_hours }}</p>
-                        </div>
-                    @endif
-                    @if($subject->lecture_hours)
-                        <div class="bg-gray-50 p-4 rounded-lg border border-gray-200">
-                            <p class="text-sm text-gray-600">Часови предавања</p>
-                            <p class="font-bold text-lg text-gray-900">{{ $subject->lecture_hours }}</p>
-                        </div>
-                    @endif
-                    @if($subject->practice_hours)
-                        <div class="bg-gray-50 p-4 rounded-lg border border-gray-200">
-                            <p class="text-sm text-gray-600">Часови вежби</p>
-                            <p class="font-bold text-lg text-gray-900">{{ $subject->practice_hours }}</p>
-                        </div>
-                    @endif
-                </div>
-
-                @if($subject->instructors)
-                    <div class="mb-6">
-                        <h3 class="font-bold text-lg text-gray-900 mb-2">Професори</h3>
-                        <p class="text-gray-700">{{ $subject->instructors }}</p>
-                    </div>
-                @endif
-
-                @if($subject->prerequisites->count() > 0)
-                    <div class="mb-6">
-                        <h3 class="font-bold text-lg text-gray-900 mb-4">Предуслови</h3>
-                        <div class="space-y-2">
-                            @foreach($subject->prerequisites as $prereq)
-                                <div class="bg-yellow-50 p-3 rounded-lg border border-yellow-200">
-                                    <p class="font-semibold text-gray-900">{{ $prereq->code }} - {{ $prereq->name }}</p>
-                                    <p class="text-sm text-gray-600">{{ $prereq->name_mk }}</p>
-                                </div>
-                            @endforeach
-                        </div>
-                    </div>
-                @endif
-            </div>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: resources/views/app.blade.php
===================================================================
--- resources/views/app.blade.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ resources/views/app.blade.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" @class(['dark' => ($appearance ?? 'system') == 'dark'])>
+    <head>
+        <meta charset="utf-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+
+        {{-- Inline script to detect system dark mode preference and apply it immediately --}}
+        <script>
+            (function() {
+                const appearance = '{{ $appearance ?? "system" }}';
+
+                if (appearance === 'system') {
+                    const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
+
+                    if (prefersDark) {
+                        document.documentElement.classList.add('dark');
+                    }
+                }
+            })();
+        </script>
+
+        {{-- Inline style to set the HTML background color based on our theme in app.css --}}
+        <style>
+            html {
+                background-color: oklch(1 0 0);
+            }
+
+            html.dark {
+                background-color: oklch(0.145 0 0);
+            }
+        </style>
+
+        <title inertia>{{ config('app.name', 'Laravel') }}</title>
+
+        <link rel="icon" href="/favicon.ico" sizes="any">
+        <link rel="icon" href="/favicon.svg" type="image/svg+xml">
+        <link rel="apple-touch-icon" href="/apple-touch-icon.png">
+
+        <link rel="preconnect" href="https://fonts.bunny.net">
+        <link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" />
+
+        @routes
+        @viteReactRefresh
+        @vite(['resources/js/app.tsx', "resources/js/pages/{$page['component']}.tsx"])
+        @inertiaHead
+    </head>
+    <body class="font-sans antialiased">
+        @inertia
+    </body>
+</html>
Index: sources/views/auth/confirm-password.blade.php
===================================================================
--- resources/views/auth/confirm-password.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,27 +1,0 @@
-<x-guest-layout>
-    <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
-        {{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
-    </div>
-
-    <form method="POST" action="{{ route('password.confirm') }}">
-        @csrf
-
-        <!-- Password -->
-        <div>
-            <x-input-label for="password" :value="__('Password')" />
-
-            <x-text-input id="password" class="block mt-1 w-full"
-                            type="password"
-                            name="password"
-                            required autocomplete="current-password" />
-
-            <x-input-error :messages="$errors->get('password')" class="mt-2" />
-        </div>
-
-        <div class="flex justify-end mt-4">
-            <x-primary-button>
-                {{ __('Confirm') }}
-            </x-primary-button>
-        </div>
-    </form>
-</x-guest-layout>
Index: sources/views/auth/forgot-password.blade.php
===================================================================
--- resources/views/auth/forgot-password.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,25 +1,0 @@
-<x-guest-layout>
-    <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
-        {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
-    </div>
-
-    <!-- Session Status -->
-    <x-auth-session-status class="mb-4" :status="session('status')" />
-
-    <form method="POST" action="{{ route('password.email') }}">
-        @csrf
-
-        <!-- Email Address -->
-        <div>
-            <x-input-label for="email" :value="__('Email')" />
-            <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
-            <x-input-error :messages="$errors->get('email')" class="mt-2" />
-        </div>
-
-        <div class="flex items-center justify-end mt-4">
-            <x-primary-button>
-                {{ __('Email Password Reset Link') }}
-            </x-primary-button>
-        </div>
-    </form>
-</x-guest-layout>
Index: sources/views/auth/login.blade.php
===================================================================
--- resources/views/auth/login.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,47 +1,0 @@
-<x-guest-layout>
-    <!-- Session Status -->
-    <x-auth-session-status class="mb-4" :status="session('status')" />
-
-    <form method="POST" action="{{ route('login') }}">
-        @csrf
-
-        <!-- Email Address -->
-        <div>
-            <x-input-label for="email" :value="__('Email')" />
-            <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus autocomplete="username" />
-            <x-input-error :messages="$errors->get('email')" class="mt-2" />
-        </div>
-
-        <!-- Password -->
-        <div class="mt-4">
-            <x-input-label for="password" :value="__('Password')" />
-
-            <x-text-input id="password" class="block mt-1 w-full"
-                            type="password"
-                            name="password"
-                            required autocomplete="current-password" />
-
-            <x-input-error :messages="$errors->get('password')" class="mt-2" />
-        </div>
-
-        <!-- Remember Me -->
-        <div class="block mt-4">
-            <label for="remember_me" class="inline-flex items-center">
-                <input id="remember_me" type="checkbox" class="rounded dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-indigo-600 shadow-sm focus:ring-indigo-500 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800" name="remember">
-                <span class="ms-2 text-sm text-gray-600 dark:text-gray-400">{{ __('Remember me') }}</span>
-            </label>
-        </div>
-
-        <div class="flex items-center justify-end mt-4">
-            @if (Route::has('password.request'))
-                <a class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" href="{{ route('password.request') }}">
-                    {{ __('Forgot your password?') }}
-                </a>
-            @endif
-
-            <x-primary-button class="ms-3">
-                {{ __('Log in') }}
-            </x-primary-button>
-        </div>
-    </form>
-</x-guest-layout>
Index: sources/views/auth/register.blade.php
===================================================================
--- resources/views/auth/register.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,52 +1,0 @@
-<x-guest-layout>
-    <form method="POST" action="{{ route('register') }}">
-        @csrf
-
-        <!-- Name -->
-        <div>
-            <x-input-label for="name" :value="__('Name')" />
-            <x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
-            <x-input-error :messages="$errors->get('name')" class="mt-2" />
-        </div>
-
-        <!-- Email Address -->
-        <div class="mt-4">
-            <x-input-label for="email" :value="__('Email')" />
-            <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autocomplete="username" />
-            <x-input-error :messages="$errors->get('email')" class="mt-2" />
-        </div>
-
-        <!-- Password -->
-        <div class="mt-4">
-            <x-input-label for="password" :value="__('Password')" />
-
-            <x-text-input id="password" class="block mt-1 w-full"
-                            type="password"
-                            name="password"
-                            required autocomplete="new-password" />
-
-            <x-input-error :messages="$errors->get('password')" class="mt-2" />
-        </div>
-
-        <!-- Confirm Password -->
-        <div class="mt-4">
-            <x-input-label for="password_confirmation" :value="__('Confirm Password')" />
-
-            <x-text-input id="password_confirmation" class="block mt-1 w-full"
-                            type="password"
-                            name="password_confirmation" required autocomplete="new-password" />
-
-            <x-input-error :messages="$errors->get('password_confirmation')" class="mt-2" />
-        </div>
-
-        <div class="flex items-center justify-end mt-4">
-            <a class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" href="{{ route('login') }}">
-                {{ __('Already registered?') }}
-            </a>
-
-            <x-primary-button class="ms-4">
-                {{ __('Register') }}
-            </x-primary-button>
-        </div>
-    </form>
-</x-guest-layout>
Index: sources/views/auth/reset-password.blade.php
===================================================================
--- resources/views/auth/reset-password.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,39 +1,0 @@
-<x-guest-layout>
-    <form method="POST" action="{{ route('password.store') }}">
-        @csrf
-
-        <!-- Password Reset Token -->
-        <input type="hidden" name="token" value="{{ $request->route('token') }}">
-
-        <!-- Email Address -->
-        <div>
-            <x-input-label for="email" :value="__('Email')" />
-            <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $request->email)" required autofocus autocomplete="username" />
-            <x-input-error :messages="$errors->get('email')" class="mt-2" />
-        </div>
-
-        <!-- Password -->
-        <div class="mt-4">
-            <x-input-label for="password" :value="__('Password')" />
-            <x-text-input id="password" class="block mt-1 w-full" type="password" name="password" required autocomplete="new-password" />
-            <x-input-error :messages="$errors->get('password')" class="mt-2" />
-        </div>
-
-        <!-- Confirm Password -->
-        <div class="mt-4">
-            <x-input-label for="password_confirmation" :value="__('Confirm Password')" />
-
-            <x-text-input id="password_confirmation" class="block mt-1 w-full"
-                                type="password"
-                                name="password_confirmation" required autocomplete="new-password" />
-
-            <x-input-error :messages="$errors->get('password_confirmation')" class="mt-2" />
-        </div>
-
-        <div class="flex items-center justify-end mt-4">
-            <x-primary-button>
-                {{ __('Reset Password') }}
-            </x-primary-button>
-        </div>
-    </form>
-</x-guest-layout>
Index: sources/views/auth/verify-email.blade.php
===================================================================
--- resources/views/auth/verify-email.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,31 +1,0 @@
-<x-guest-layout>
-    <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
-        {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }}
-    </div>
-
-    @if (session('status') == 'verification-link-sent')
-        <div class="mb-4 font-medium text-sm text-green-600 dark:text-green-400">
-            {{ __('A new verification link has been sent to the email address you provided during registration.') }}
-        </div>
-    @endif
-
-    <div class="mt-4 flex items-center justify-between">
-        <form method="POST" action="{{ route('verification.send') }}">
-            @csrf
-
-            <div>
-                <x-primary-button>
-                    {{ __('Resend Verification Email') }}
-                </x-primary-button>
-            </div>
-        </form>
-
-        <form method="POST" action="{{ route('logout') }}">
-            @csrf
-
-            <button type="submit" class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800">
-                {{ __('Log Out') }}
-            </button>
-        </form>
-    </div>
-</x-guest-layout>
Index: sources/views/components/application-logo.blade.php
===================================================================
--- resources/views/components/application-logo.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3 +1,0 @@
-<svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
-    <path d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/>
-</svg>
Index: sources/views/components/auth-session-status.blade.php
===================================================================
--- resources/views/components/auth-session-status.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,7 +1,0 @@
-@props(['status'])
-
-@if ($status)
-    <div {{ $attributes->merge(['class' => 'font-medium text-sm text-green-600 dark:text-green-400']) }}>
-        {{ $status }}
-    </div>
-@endif
Index: sources/views/components/danger-button.blade.php
===================================================================
--- resources/views/components/danger-button.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3 +1,0 @@
-<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>
-    {{ $slot }}
-</button>
Index: sources/views/components/dropdown-link.blade.php
===================================================================
--- resources/views/components/dropdown-link.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<a {{ $attributes->merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-800 transition duration-150 ease-in-out']) }}>{{ $slot }}</a>
Index: sources/views/components/dropdown.blade.php
===================================================================
--- resources/views/components/dropdown.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,35 +1,0 @@
-@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white dark:bg-gray-700'])
-
-@php
-$alignmentClasses = match ($align) {
-    'left' => 'ltr:origin-top-left rtl:origin-top-right start-0',
-    'top' => 'origin-top',
-    default => 'ltr:origin-top-right rtl:origin-top-left end-0',
-};
-
-$width = match ($width) {
-    '48' => 'w-48',
-    default => $width,
-};
-@endphp
-
-<div class="relative" x-data="{ open: false }" @click.outside="open = false" @close.stop="open = false">
-    <div @click="open = ! open">
-        {{ $trigger }}
-    </div>
-
-    <div x-show="open"
-            x-transition:enter="transition ease-out duration-200"
-            x-transition:enter-start="opacity-0 scale-95"
-            x-transition:enter-end="opacity-100 scale-100"
-            x-transition:leave="transition ease-in duration-75"
-            x-transition:leave-start="opacity-100 scale-100"
-            x-transition:leave-end="opacity-0 scale-95"
-            class="absolute z-50 mt-2 {{ $width }} rounded-md shadow-lg {{ $alignmentClasses }}"
-            style="display: none;"
-            @click="open = false">
-        <div class="rounded-md ring-1 ring-black ring-opacity-5 {{ $contentClasses }}">
-            {{ $content }}
-        </div>
-    </div>
-</div>
Index: sources/views/components/input-error.blade.php
===================================================================
--- resources/views/components/input-error.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,9 +1,0 @@
-@props(['messages'])
-
-@if ($messages)
-    <ul {{ $attributes->merge(['class' => 'text-sm text-red-600 dark:text-red-400 space-y-1']) }}>
-        @foreach ((array) $messages as $message)
-            <li>{{ $message }}</li>
-        @endforeach
-    </ul>
-@endif
Index: sources/views/components/input-label.blade.php
===================================================================
--- resources/views/components/input-label.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,5 +1,0 @@
-@props(['value'])
-
-<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-gray-700 dark:text-gray-300']) }}>
-    {{ $value ?? $slot }}
-</label>
Index: sources/views/components/modal.blade.php
===================================================================
--- resources/views/components/modal.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,78 +1,0 @@
-@props([
-    'name',
-    'show' => false,
-    'maxWidth' => '2xl'
-])
-
-@php
-$maxWidth = [
-    'sm' => 'sm:max-w-sm',
-    'md' => 'sm:max-w-md',
-    'lg' => 'sm:max-w-lg',
-    'xl' => 'sm:max-w-xl',
-    '2xl' => 'sm:max-w-2xl',
-][$maxWidth];
-@endphp
-
-<div
-    x-data="{
-        show: @js($show),
-        focusables() {
-            // All focusable element types...
-            let selector = 'a, button, input:not([type=\'hidden\']), textarea, select, details, [tabindex]:not([tabindex=\'-1\'])'
-            return [...$el.querySelectorAll(selector)]
-                // All non-disabled elements...
-                .filter(el => ! el.hasAttribute('disabled'))
-        },
-        firstFocusable() { return this.focusables()[0] },
-        lastFocusable() { return this.focusables().slice(-1)[0] },
-        nextFocusable() { return this.focusables()[this.nextFocusableIndex()] || this.firstFocusable() },
-        prevFocusable() { return this.focusables()[this.prevFocusableIndex()] || this.lastFocusable() },
-        nextFocusableIndex() { return (this.focusables().indexOf(document.activeElement) + 1) % (this.focusables().length + 1) },
-        prevFocusableIndex() { return Math.max(0, this.focusables().indexOf(document.activeElement)) -1 },
-    }"
-    x-init="$watch('show', value => {
-        if (value) {
-            document.body.classList.add('overflow-y-hidden');
-            {{ $attributes->has('focusable') ? 'setTimeout(() => firstFocusable().focus(), 100)' : '' }}
-        } else {
-            document.body.classList.remove('overflow-y-hidden');
-        }
-    })"
-    x-on:open-modal.window="$event.detail == '{{ $name }}' ? show = true : null"
-    x-on:close-modal.window="$event.detail == '{{ $name }}' ? show = false : null"
-    x-on:close.stop="show = false"
-    x-on:keydown.escape.window="show = false"
-    x-on:keydown.tab.prevent="$event.shiftKey || nextFocusable().focus()"
-    x-on:keydown.shift.tab.prevent="prevFocusable().focus()"
-    x-show="show"
-    class="fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50"
-    style="display: {{ $show ? 'block' : 'none' }};"
->
-    <div
-        x-show="show"
-        class="fixed inset-0 transform transition-all"
-        x-on:click="show = false"
-        x-transition:enter="ease-out duration-300"
-        x-transition:enter-start="opacity-0"
-        x-transition:enter-end="opacity-100"
-        x-transition:leave="ease-in duration-200"
-        x-transition:leave-start="opacity-100"
-        x-transition:leave-end="opacity-0"
-    >
-        <div class="absolute inset-0 bg-gray-500 dark:bg-gray-900 opacity-75"></div>
-    </div>
-
-    <div
-        x-show="show"
-        class="mb-6 bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full {{ $maxWidth }} sm:mx-auto"
-        x-transition:enter="ease-out duration-300"
-        x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
-        x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100"
-        x-transition:leave="ease-in duration-200"
-        x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100"
-        x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
-    >
-        {{ $slot }}
-    </div>
-</div>
Index: sources/views/components/nav-link.blade.php
===================================================================
--- resources/views/components/nav-link.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,11 +1,0 @@
-@props(['active'])
-
-@php
-$classes = ($active ?? false)
-            ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'
-            : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out';
-@endphp
-
-<a {{ $attributes->merge(['class' => $classes]) }}>
-    {{ $slot }}
-</a>
Index: sources/views/components/primary-button.blade.php
===================================================================
--- resources/views/components/primary-button.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3 +1,0 @@
-<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 dark:bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-white dark:text-gray-800 uppercase tracking-widest hover:bg-gray-700 dark:hover:bg-white focus:bg-gray-700 dark:focus:bg-white active:bg-gray-900 dark:active:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>
-    {{ $slot }}
-</button>
Index: sources/views/components/responsive-nav-link.blade.php
===================================================================
--- resources/views/components/responsive-nav-link.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,11 +1,0 @@
-@props(['active'])
-
-@php
-$classes = ($active ?? false)
-            ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-none focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out'
-            : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out';
-@endphp
-
-<a {{ $attributes->merge(['class' => $classes]) }}>
-    {{ $slot }}
-</a>
Index: sources/views/components/secondary-button.blade.php
===================================================================
--- resources/views/components/secondary-button.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3 +1,0 @@
-<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-500 rounded-md font-semibold text-xs text-gray-700 dark:text-gray-300 uppercase tracking-widest shadow-sm hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 disabled:opacity-25 transition ease-in-out duration-150']) }}>
-    {{ $slot }}
-</button>
Index: sources/views/components/text-input.blade.php
===================================================================
--- resources/views/components/text-input.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3 +1,0 @@
-@props(['disabled' => false])
-
-<input @disabled($disabled) {{ $attributes->merge(['class' => 'border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-indigo-500 dark:focus:ring-indigo-600 rounded-md shadow-sm']) }}>
Index: sources/views/dashboard.blade.php
===================================================================
--- resources/views/dashboard.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,58 +1,0 @@
-<x-app-layout>
-    <x-slot name="header">
-        <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
-            {{ __('Контролна табла') }}
-        </h2>
-    </x-slot>
-
-    <div class="py-12">
-        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-            <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
-                <!-- Welcome Card -->
-                <div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
-                    <div class="p-6 text-gray-900 dark:text-gray-100">
-                        <h3 class="text-lg font-semibold mb-2">Добредојде, {{ Auth::user()->name }}!</h3>
-                        <p class="text-gray-600 dark:text-gray-400 text-sm">
-                            @if(Auth::user()->isAdmin())
-                                Администраторски кориснички сметка. Управувајте со предметите и системските подесувања.
-                            @else
-                                Планирајте ја вашата академска патека и добијте персонализиран roadmap врз основа на вашите академски цели.
-                            @endif
-                        </p>
-                    </div>
-                </div>
-
-                <!-- Roadmap Card (for students) -->
-                @if(Auth::user()->isStudent())
-                    <div class="bg-gradient-to-br from-indigo-50 to-blue-50 dark:from-gray-700 dark:to-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
-                        <div class="p-6">
-                            <h3 class="text-lg font-semibold text-indigo-900 dark:text-indigo-100 mb-2">Вашиот Академски roadmap</h3>
-                            <p class="text-gray-700 dark:text-gray-300 text-sm mb-4">
-                                Создајте персонализиран roadmap според избраната студиска програма.
-                            </p>
-                            <a href="{{ route('roadmap.create') }}" class="inline-flex items-center px-4 py-2 bg-indigo-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                                Почнете
-                            </a>
-                        </div>
-                    </div>
-                @endif
-
-                <!-- Admin Panel Card (for admins) -->
-                @if(Auth::user()->isAdmin())
-                    <div class="bg-gradient-to-br from-purple-50 to-pink-50 dark:from-gray-700 dark:to-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
-                        <div class="p-6">
-                            <h3 class="text-lg font-semibold text-purple-900 dark:text-purple-100 mb-2">Управување со Предмети</h3>
-                            <p class="text-gray-700 dark:text-gray-300 text-sm mb-4">
-                                Додајте, уредувајте и бришите предмети. Управувајте со предуслови.
-                            </p>
-                            <a href="{{ route('subjects.index') }}" class="inline-flex items-center px-4 py-2 bg-purple-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-purple-700 focus:bg-purple-700 active:bg-purple-900 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                                Предмети
-                            </a>
-                        </div>
-                    </div>
-                @endif
-
-            </div>
-        </div>
-    </div>
-</x-app-layout>
Index: sources/views/layouts/app.blade.php
===================================================================
--- resources/views/layouts/app.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,36 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
-    <head>
-        <meta charset="utf-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <meta name="csrf-token" content="{{ csrf_token() }}">
-
-        <title>{{ config('app.name', 'Laravel') }}</title>
-
-        <!-- Fonts -->
-        <link rel="preconnect" href="https://fonts.bunny.net">
-        <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
-
-        <!-- Scripts -->
-        @vite(['resources/css/app.css', 'resources/js/app.js'])
-    </head>
-    <body class="font-sans antialiased">
-        <div class="min-h-screen bg-gray-100 dark:bg-gray-900">
-            @include('layouts.navigation')
-
-            <!-- Page Heading -->
-            @isset($header)
-                <header class="bg-white dark:bg-gray-800 shadow">
-                    <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
-                        {{ $header }}
-                    </div>
-                </header>
-            @endisset
-
-            <!-- Page Content -->
-            <main>
-                {{ $slot }}
-            </main>
-        </div>
-    </body>
-</html>
Index: sources/views/layouts/guest.blade.php
===================================================================
--- resources/views/layouts/guest.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,30 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
-    <head>
-        <meta charset="utf-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <meta name="csrf-token" content="{{ csrf_token() }}">
-
-        <title>{{ config('app.name', 'Laravel') }}</title>
-
-        <!-- Fonts -->
-        <link rel="preconnect" href="https://fonts.bunny.net">
-        <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
-
-        <!-- Scripts -->
-        @vite(['resources/css/app.css', 'resources/js/app.js'])
-    </head>
-    <body class="font-sans text-gray-900 antialiased">
-        <div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900">
-            <div>
-                <a href="/">
-                    <x-application-logo class="w-20 h-20 fill-current text-gray-500" />
-                </a>
-            </div>
-
-            <div class="w-full sm:max-w-md mt-6 px-6 py-4 bg-white dark:bg-gray-800 shadow-md overflow-hidden sm:rounded-lg">
-                {{ $slot }}
-            </div>
-        </div>
-    </body>
-</html>
Index: sources/views/layouts/navigation.blade.php
===================================================================
--- resources/views/layouts/navigation.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,114 +1,0 @@
-<nav x-data="{ open: false }" class="bg-white dark:bg-gray-800 border-b border-gray-100 dark:border-gray-700">
-    <!-- Primary Navigation Menu -->
-    <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
-        <div class="flex justify-between h-16">
-            <div class="flex">
-                <!-- Logo -->
-                <div class="shrink-0 flex items-center">
-                    <a href="{{ route('dashboard') }}">
-                        <x-application-logo class="block h-9 w-auto fill-current text-gray-800 dark:text-gray-200" />
-                    </a>
-                </div>
-
-                <!-- Navigation Links -->
-                <div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
-                    <x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
-                        {{ __('Dashboard') }}
-                    </x-nav-link>
-                    @if(Auth::user()->isAdmin())
-                        <x-nav-link :href="route('subjects.index')" :active="request()->routeIs('subjects.*')">
-                            {{ __('Предмети') }}
-                        </x-nav-link>
-                        <x-nav-link :href="route('study-programs.index')" :active="request()->routeIs('study-programs.*')">
-                            {{ __('Студиски програми') }}
-                        </x-nav-link>
-                    @endif
-                    @if(Auth::user()->isStudent())
-                        <x-nav-link :href="route('roadmap.show')" :active="request()->routeIs('roadmap.*')">
-                            {{ __('Академски roadmap') }}
-                        </x-nav-link>
-                    @endif
-
-                </div>
-            </div>
-
-            <!-- Settings Dropdown -->
-            <div class="hidden sm:flex sm:items-center sm:ms-6">
-                <x-dropdown align="right" width="48">
-                    <x-slot name="trigger">
-                        <button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-300 focus:outline-none transition ease-in-out duration-150">
-                            <div>{{ Auth::user()->name }}</div>
-
-                            <div class="ms-1">
-                                <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
-                                    <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
-                                </svg>
-                            </div>
-                        </button>
-                    </x-slot>
-
-                    <x-slot name="content">
-                        <x-dropdown-link :href="route('profile.edit')">
-                            {{ __('Profile') }}
-                        </x-dropdown-link>
-
-                        <!-- Authentication -->
-                        <form method="POST" action="{{ route('logout') }}">
-                            @csrf
-
-                            <x-dropdown-link :href="route('logout')"
-                                    onclick="event.preventDefault();
-                                                this.closest('form').submit();">
-                                {{ __('Log Out') }}
-                            </x-dropdown-link>
-                        </form>
-                    </x-slot>
-                </x-dropdown>
-            </div>
-
-            <!-- Hamburger -->
-            <div class="-me-2 flex items-center sm:hidden">
-                <button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-900 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-900 focus:text-gray-500 dark:focus:text-gray-400 transition duration-150 ease-in-out">
-                    <svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
-                        <path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
-                        <path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
-                    </svg>
-                </button>
-            </div>
-        </div>
-    </div>
-
-    <!-- Responsive Navigation Menu -->
-    <div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
-        <div class="pt-2 pb-3 space-y-1">
-            <x-responsive-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
-                {{ __('Dashboard') }}
-            </x-responsive-nav-link>
-        </div>
-
-        <!-- Responsive Settings Options -->
-        <div class="pt-4 pb-1 border-t border-gray-200 dark:border-gray-600">
-            <div class="px-4">
-                <div class="font-medium text-base text-gray-800 dark:text-gray-200">{{ Auth::user()->name }}</div>
-                <div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
-            </div>
-
-            <div class="mt-3 space-y-1">
-                <x-responsive-nav-link :href="route('profile.edit')">
-                    {{ __('Profile') }}
-                </x-responsive-nav-link>
-
-                <!-- Authentication -->
-                <form method="POST" action="{{ route('logout') }}">
-                    @csrf
-
-                    <x-responsive-nav-link :href="route('logout')"
-                            onclick="event.preventDefault();
-                                        this.closest('form').submit();">
-                        {{ __('Log Out') }}
-                    </x-responsive-nav-link>
-                </form>
-            </div>
-        </div>
-    </div>
-</nav>
Index: sources/views/profile/edit.blade.php
===================================================================
--- resources/views/profile/edit.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<x-app-layout>
-    <x-slot name="header">
-        <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
-            {{ __('Profile') }}
-        </h2>
-    </x-slot>
-
-    <div class="py-12">
-        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
-            <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
-                <div class="max-w-xl">
-                    @include('profile.partials.update-profile-information-form')
-                </div>
-            </div>
-
-            <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
-                <div class="max-w-xl">
-                    @include('profile.partials.update-password-form')
-                </div>
-            </div>
-
-            <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
-                <div class="max-w-xl">
-                    @include('profile.partials.delete-user-form')
-                </div>
-            </div>
-        </div>
-    </div>
-</x-app-layout>
Index: sources/views/profile/partials/delete-user-form.blade.php
===================================================================
--- resources/views/profile/partials/delete-user-form.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,55 +1,0 @@
-<section class="space-y-6">
-    <header>
-        <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
-            {{ __('Delete Account') }}
-        </h2>
-
-        <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
-            {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}
-        </p>
-    </header>
-
-    <x-danger-button
-        x-data=""
-        x-on:click.prevent="$dispatch('open-modal', 'confirm-user-deletion')"
-    >{{ __('Delete Account') }}</x-danger-button>
-
-    <x-modal name="confirm-user-deletion" :show="$errors->userDeletion->isNotEmpty()" focusable>
-        <form method="post" action="{{ route('profile.destroy') }}" class="p-6">
-            @csrf
-            @method('delete')
-
-            <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
-                {{ __('Are you sure you want to delete your account?') }}
-            </h2>
-
-            <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
-                {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }}
-            </p>
-
-            <div class="mt-6">
-                <x-input-label for="password" value="{{ __('Password') }}" class="sr-only" />
-
-                <x-text-input
-                    id="password"
-                    name="password"
-                    type="password"
-                    class="mt-1 block w-3/4"
-                    placeholder="{{ __('Password') }}"
-                />
-
-                <x-input-error :messages="$errors->userDeletion->get('password')" class="mt-2" />
-            </div>
-
-            <div class="mt-6 flex justify-end">
-                <x-secondary-button x-on:click="$dispatch('close')">
-                    {{ __('Cancel') }}
-                </x-secondary-button>
-
-                <x-danger-button class="ms-3">
-                    {{ __('Delete Account') }}
-                </x-danger-button>
-            </div>
-        </form>
-    </x-modal>
-</section>
Index: sources/views/profile/partials/update-password-form.blade.php
===================================================================
--- resources/views/profile/partials/update-password-form.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,48 +1,0 @@
-<section>
-    <header>
-        <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
-            {{ __('Update Password') }}
-        </h2>
-
-        <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
-            {{ __('Ensure your account is using a long, random password to stay secure.') }}
-        </p>
-    </header>
-
-    <form method="post" action="{{ route('password.update') }}" class="mt-6 space-y-6">
-        @csrf
-        @method('put')
-
-        <div>
-            <x-input-label for="update_password_current_password" :value="__('Current Password')" />
-            <x-text-input id="update_password_current_password" name="current_password" type="password" class="mt-1 block w-full" autocomplete="current-password" />
-            <x-input-error :messages="$errors->updatePassword->get('current_password')" class="mt-2" />
-        </div>
-
-        <div>
-            <x-input-label for="update_password_password" :value="__('New Password')" />
-            <x-text-input id="update_password_password" name="password" type="password" class="mt-1 block w-full" autocomplete="new-password" />
-            <x-input-error :messages="$errors->updatePassword->get('password')" class="mt-2" />
-        </div>
-
-        <div>
-            <x-input-label for="update_password_password_confirmation" :value="__('Confirm Password')" />
-            <x-text-input id="update_password_password_confirmation" name="password_confirmation" type="password" class="mt-1 block w-full" autocomplete="new-password" />
-            <x-input-error :messages="$errors->updatePassword->get('password_confirmation')" class="mt-2" />
-        </div>
-
-        <div class="flex items-center gap-4">
-            <x-primary-button>{{ __('Save') }}</x-primary-button>
-
-            @if (session('status') === 'password-updated')
-                <p
-                    x-data="{ show: true }"
-                    x-show="show"
-                    x-transition
-                    x-init="setTimeout(() => show = false, 2000)"
-                    class="text-sm text-gray-600 dark:text-gray-400"
-                >{{ __('Saved.') }}</p>
-            @endif
-        </div>
-    </form>
-</section>
Index: sources/views/profile/partials/update-profile-information-form.blade.php
===================================================================
--- resources/views/profile/partials/update-profile-information-form.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,64 +1,0 @@
-<section>
-    <header>
-        <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
-            {{ __('Profile Information') }}
-        </h2>
-
-        <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
-            {{ __("Update your account's profile information and email address.") }}
-        </p>
-    </header>
-
-    <form id="send-verification" method="post" action="{{ route('verification.send') }}">
-        @csrf
-    </form>
-
-    <form method="post" action="{{ route('profile.update') }}" class="mt-6 space-y-6">
-        @csrf
-        @method('patch')
-
-        <div>
-            <x-input-label for="name" :value="__('Name')" />
-            <x-text-input id="name" name="name" type="text" class="mt-1 block w-full" :value="old('name', $user->name)" required autofocus autocomplete="name" />
-            <x-input-error class="mt-2" :messages="$errors->get('name')" />
-        </div>
-
-        <div>
-            <x-input-label for="email" :value="__('Email')" />
-            <x-text-input id="email" name="email" type="email" class="mt-1 block w-full" :value="old('email', $user->email)" required autocomplete="username" />
-            <x-input-error class="mt-2" :messages="$errors->get('email')" />
-
-            @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail())
-                <div>
-                    <p class="text-sm mt-2 text-gray-800 dark:text-gray-200">
-                        {{ __('Your email address is unverified.') }}
-
-                        <button form="send-verification" class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800">
-                            {{ __('Click here to re-send the verification email.') }}
-                        </button>
-                    </p>
-
-                    @if (session('status') === 'verification-link-sent')
-                        <p class="mt-2 font-medium text-sm text-green-600 dark:text-green-400">
-                            {{ __('A new verification link has been sent to your email address.') }}
-                        </p>
-                    @endif
-                </div>
-            @endif
-        </div>
-
-        <div class="flex items-center gap-4">
-            <x-primary-button>{{ __('Save') }}</x-primary-button>
-
-            @if (session('status') === 'profile-updated')
-                <p
-                    x-data="{ show: true }"
-                    x-show="show"
-                    x-transition
-                    x-init="setTimeout(() => show = false, 2000)"
-                    class="text-sm text-gray-600 dark:text-gray-400"
-                >{{ __('Saved.') }}</p>
-            @endif
-        </div>
-    </form>
-</section>
Index: sources/views/roadmap/create.blade.php
===================================================================
--- resources/views/roadmap/create.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,370 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-2xl text-gray-900 mb-2">Создајте Свој Академски Roadmap</h2>
-                <p class="text-gray-600 mb-6">Додадете ги сите предмети за да го генерирате вашиот roadmap</p>
-
-                <form method="POST" action="{{ route('roadmap.store') }}" class="space-y-8" id="roadmapForm">
-                    @csrf
-
-                    <!-- Step 1: Basic Info -->
-                    <div class="bg-indigo-50 rounded-lg p-6 border-l-4 border-indigo-600">
-                        <h3 class="font-bold text-lg text-gray-900 mb-4">Чекор 1: Основни информации</h3>
-
-                        <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                            <!-- Study Program Selection -->
-                            <div>
-                                <label for="study_program_id" class="block font-bold text-sm text-gray-900 mb-2">
-                                    Студиска Програма <span class="text-red-500">*</span>
-                                </label>
-                                <select id="study_program_id" name="study_program_id" class="mt-1 block w-full px-4 py-3 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-base" required>
-                                    <option value="">-- Изберете студиска програма --</option>
-                                    @forelse($studyPrograms as $program)
-                                        <option value="{{ $program->id }}">
-                                            {{ $program->name_mk }} ({{ $program->duration_years }} години)
-                                        </option>
-                                    @empty
-                                        <option disabled>Нема достапни студиски програми</option>
-                                    @endforelse
-                                </select>
-                                @error('study_program_id')
-                                    <p class="text-red-500 text-sm mt-2">{{ $message }}</p>
-                                @enderror
-                            </div>
-
-                            <!-- Career Path Selection -->
-                            <div>
-                                <label for="career_path_id" class="block font-bold text-sm text-gray-900 mb-2">
-                                    Избор на Каријерна Патека <span class="text-gray-500">(опционално)</span>
-                                </label>
-                                <select id="career_path_id" name="career_path_id" class="mt-1 block w-full px-4 py-3 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-base">
-                                    <option value="">-- Изберете каријерна патека (опционално) --</option>
-                                    @forelse($careerPaths as $path)
-                                        <option value="{{ $path->id }}" title="{{ $path->description }}">
-                                            {{ $path->name }}
-                                        </option>
-                                    @empty
-                                        <option disabled>Нема достапни каријерни патеки</option>
-                                    @endforelse
-                                </select>
-                                <p class="text-xs text-gray-500 mt-2">Изберете каријерна патека за да добиете персонализирани препораки за предметите.</p>
-                                @error('career_path_id')
-                                    <p class="text-red-500 text-sm mt-2">{{ $message }}</p>
-                                @enderror
-                            </div>
-                        </div>
-
-                        <!-- Current Year Selection - Now full width -->
-                        <div class="mt-6">
-                            <label for="current_year" class="block font-bold text-sm text-gray-900 mb-2">
-                                Моја тековна година <span class="text-red-500">*</span>
-                            </label>
-                            <select id="current_year" name="current_year" class="mt-1 block w-full px-4 py-3 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-base" required>
-                                <option value="">-- Изберете година --</option>
-                                <option value="1">1-ва година</option>
-                                <option value="2">2-ра година</option>
-                                <option value="3">3-та година</option>
-                                <option value="4">4-та година</option>
-                            </select>
-                            @error('current_year')
-                                <p class="text-red-500 text-sm mt-2">{{ $message }}</p>
-                            @enderror
-                        </div>
-
-                        <div class="mt-4 p-3 bg-white rounded border border-indigo-200">
-                            <p class="text-sm text-gray-600">
-                                <strong class="text-indigo-600">Информација:</strong> Откако ќе го попуните овој чекор, може да ги додадете вашите завршени предмети. како и вашите предвидени предмети.
-                            </p>
-                        </div>
-                    </div>
-
-                    <!-- Step 2: Subjects Selection (Hidden until step 1 is filled) -->
-                    <div id="step2" style="display: none;">
-                        <div class="bg-green-50 rounded-lg p-6 border-l-4 border-green-600">
-                            <h3 class="font-bold text-lg text-gray-900 mb-6">Чекор 2: Внесете вашиот roadmap</h3>
-
-                            <div class="mb-4 p-3 bg-white rounded border border-green-200">
-                                <p class="text-sm text-gray-600">
-                                    <strong class="text-green-600">Обврска:</strong> Мора да изберете барем еден предмет во една од категориите (завршен или во процес).
-                                </p>
-                            </div>
-
-                            <!-- Search Box -->
-                            <div class="mb-6">
-                                <input type="text" id="subject-search" placeholder="🔍 Пребарај предмети по име или код..." class="w-full px-4 py-3 rounded-md border border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-base">
-                            </div>
-
-                            <!-- Year Section Container will be populated by JavaScript -->
-                            <div id="year-container">
-                                <p class="text-gray-500 text-center py-4">Изберете студиска програма за да ги видите предметите...</p>
-                            </div>
-                        </div>
-                    </div>
-
-                    <!-- Submit Button -->
-                    <div class="flex justify-between pt-6 border-t" id="submitContainer" style="display: none;">
-                        <button type="reset" class="inline-flex items-center px-6 py-3 bg-gray-400 border border-transparent rounded-md font-semibold text-sm text-white uppercase tracking-widest hover:bg-gray-500 focus:bg-gray-500 active:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                            Рестартирај
-                        </button>
-                        <button type="submit" class="inline-flex items-center px-6 py-3 bg-indigo-600 border border-transparent rounded-md font-semibold text-sm text-white uppercase tracking-widest hover:bg-indigo-700 focus:bg-indigo-700 active:bg-indigo-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150">
-                            Генерирај roadmap
-                        </button>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script>
-document.addEventListener('DOMContentLoaded', function() {
-    const studyProgramSelect = document.getElementById('study_program_id');
-    const currentYearSelect = document.getElementById('current_year');
-    const searchInput = document.getElementById('subject-search');
-    const step2 = document.getElementById('step2');
-    const submitContainer = document.getElementById('submitContainer');
-    const yearContainer = document.getElementById('year-container');
-
-    let subjectsData = {}; // Store subjects for current program
-
-    // Function to check if step 1 is complete
-    function checkStep1Complete() {
-        return studyProgramSelect.value !== '' && currentYearSelect.value !== '';
-    }
-
-    // Function to check if at least one subject is selected
-    function checkStep2Complete() {
-        const completedCheckboxes = document.querySelectorAll('input[name="completed_subjects[]"]:checked');
-        const inProgressCheckboxes = document.querySelectorAll('input[name="in_progress_subjects[]"]:checked');
-        return completedCheckboxes.length > 0 || inProgressCheckboxes.length > 0;
-    }
-
-    // Function to render subjects for a program
-    function renderSubjects(subjects) {
-        subjectsData = subjects;
-
-        // Group subjects by year and semester
-        const subjectsByYear = {};
-        subjects.forEach(subject => {
-            const year = subject.year;
-            if (!subjectsByYear[year]) {
-                subjectsByYear[year] = { winter: [], summer: [] };
-            }
-            subjectsByYear[year][subject.semester_type].push(subject);
-        });
-
-        // Build HTML
-        let html = '';
-        Object.keys(subjectsByYear).sort((a, b) => a - b).forEach(year => {
-            const semesters = subjectsByYear[year];
-            html += buildYearSection(year, semesters);
-        });
-
-        yearContainer.innerHTML = html;
-
-        // Reattach event listeners to new checkboxes
-        attachCheckboxListeners();
-
-        // Attach year header toggle listeners
-        attachYearToggleListeners();
-
-        // Apply year filtering
-        filterYearSections();
-    }
-
-    // Build year section HTML
-    function buildYearSection(year, semesters) {
-        let html = `<div class="mb-8 year-section" data-year="${year}" style="display: none;">
-            <div class="bg-indigo-100 rounded-t-lg p-4 cursor-pointer flex items-center justify-between year-header hover:bg-indigo-200 transition" data-year="${year}">
-                <h4 class="font-bold text-xl text-indigo-700">
-                    Година ${year}
-                </h4>
-                <span class="year-toggle-icon text-indigo-700 text-2xl">▼</span>
-            </div>
-            <div class="year-content bg-white rounded-b-lg p-6 " style="display: block;">
-                <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">`;
-
-        // Winter Semester
-        html += buildSemesterSection('winter', semesters.winter, '❄️ Зимски Семестар', 'blue');
-
-        // Summer Semester
-        html += buildSemesterSection('summer', semesters.summer, '☀️ Летен Семестар', 'amber');
-
-        html += `</div></div></div>`;
-        return html;
-    }
-
-    // Build semester section HTML
-    function buildSemesterSection(semesterType, subjects, title, color) {
-        const mandatory = subjects.filter(s => s.subject_type === 'mandatory');
-        const elective = subjects.filter(s => s.subject_type === 'elective');
-
-        const colorClass = color === 'blue' ? 'bg-blue-50 border-l-4 border-blue-600 text-blue-700' : 'bg-amber-50 border-l-4 border-amber-600 text-amber-700';
-
-        let html = `<div class="${colorClass} rounded-lg p-6">
-            <h5 class="font-bold text-lg mb-6">${title}</h5>`;
-
-        // Mandatory subjects
-        if (mandatory.length > 0) {
-            html += `<div class="mb-6">
-                <h6 class="font-semibold text-sm text-green-700 mb-3">✓ Задолжителни предмети</h6>
-                <div class="space-y-3 pl-2 mb-4">`;
-
-            mandatory.forEach(subject => {
-                html += buildSubjectCheckbox(subject, 'green');
-            });
-
-            html += `</div></div>`;
-        }
-
-        // Elective subjects
-        if (elective.length > 0) {
-            html += `<div class="border-t pt-4">
-                <h6 class="font-semibold text-sm text-purple-700 mb-3">⭐ Изборни предмети</h6>
-                <div class="space-y-3 pl-2">`;
-
-            elective.forEach(subject => {
-                html += buildSubjectCheckbox(subject, 'purple');
-            });
-
-            html += `</div></div>`;
-        }
-
-        if (mandatory.length === 0 && elective.length === 0) {
-            html += `<p class="text-gray-500 text-sm">Нема предмети</p>`;
-        }
-
-        html += `</div>`;
-        return html;
-    }
-
-    // Build individual subject checkbox
-    function buildSubjectCheckbox(subject, type) {
-        const colorClass = type === 'green' ? 'border-gray-300 text-green-600 focus:border-green-500 focus:ring-green-500' : 'border-gray-300 text-purple-600 focus:border-purple-500 focus:ring-purple-500';
-
-        return `<div class="subject-item" data-code="${subject.code}" data-name="${subject.name.toLowerCase()} ${subject.name_mk.toLowerCase()}">
-            <label class="flex items-start cursor-pointer group">
-                <input type="checkbox" name="completed_subjects[]" value="${subject.id}"
-                    class="completed-subject rounded ${colorClass} shadow-sm mt-1">
-                <span class="ml-3 text-sm">
-                    <strong class="text-gray-900">${subject.code}</strong>
-                    <span class="block text-gray-600 text-xs">${subject.name}</span>
-                    <span class="block text-gray-500 text-xs italic">${subject.name_mk}</span>
-                    <span class="text-gray-500 text-xs">${subject.credits} ECTS</span>
-                </span>
-            </label>
-        </div>`;
-    }
-
-    // Function to filter subjects by search
-    function filterSubjectsBySearch() {
-        const searchTerm = (searchInput ? searchInput.value : '').toLowerCase().trim();
-        const subjectItems = document.querySelectorAll('.subject-item');
-
-        subjectItems.forEach(item => {
-            const code = item.getAttribute('data-code') || '';
-            const name = item.getAttribute('data-name') || '';
-
-            if (searchTerm === '' || code.toLowerCase().includes(searchTerm) || name.includes(searchTerm)) {
-                item.style.display = '';
-            } else {
-                item.style.display = 'none';
-            }
-        });
-    }
-
-    // Function to filter year sections based on current year
-    function filterYearSections() {
-        const currentYear = parseInt(currentYearSelect.value) || 0;
-        const yearSections = document.querySelectorAll('.year-section');
-
-        yearSections.forEach(section => {
-            const sectionYear = parseInt(section.getAttribute('data-year'));
-            if (currentYear > 0 && sectionYear <= currentYear) {
-                section.style.display = 'block';
-            } else {
-                section.style.display = 'none';
-                // Uncheck all checkboxes in hidden sections
-                section.querySelectorAll('input[type="checkbox"]').forEach(cb => cb.checked = false);
-            }
-        });
-
-        // Apply search filter after year filtering
-        filterSubjectsBySearch();
-    }
-
-    // Attach checkbox listeners
-    function attachCheckboxListeners() {
-        const completedCheckboxes = document.querySelectorAll('input[name="completed_subjects[]"]');
-
-        completedCheckboxes.forEach(cb => {
-            cb.addEventListener('change', function() {
-                updateForm();
-            });
-        });
-    }
-
-    // Attach year toggle listeners
-    function attachYearToggleListeners() {
-        const yearHeaders = document.querySelectorAll('.year-header');
-
-        yearHeaders.forEach(header => {
-            header.addEventListener('click', function() {
-                const yearContent = this.nextElementSibling;
-                const toggleIcon = this.querySelector('.year-toggle-icon');
-
-                if (yearContent.style.display === 'none') {
-                    yearContent.style.display = 'block';
-                    toggleIcon.textContent = '▼';
-                } else {
-                    yearContent.style.display = 'none';
-                    toggleIcon.textContent = '▶';
-                }
-            });
-        });
-    }
-
-    // Function to update visibility and form state
-    function updateForm() {
-        filterYearSections();
-        if (checkStep1Complete()) {
-            step2.style.display = 'block';
-            submitContainer.style.display = checkStep2Complete() ? 'flex' : 'none';
-        } else {
-            step2.style.display = 'none';
-            submitContainer.style.display = 'none';
-        }
-    }
-
-    // Fetch subjects when study program is selected
-    studyProgramSelect.addEventListener('change', async function() {
-        if (this.value) {
-            try {
-                const response = await fetch(`/api/study-program/${this.value}/subjects`);
-                const subjects = await response.json();
-                renderSubjects(subjects);
-            } catch (error) {
-                console.error('Error fetching subjects:', error);
-                yearContainer.innerHTML = '<p class="text-red-500">Грешка при вчитување на предметите</p>';
-            }
-        } else {
-            yearContainer.innerHTML = '<p class="text-gray-500 text-center py-4">Изберете студиска програма за да ги видите предметите...</p>';
-        }
-        updateForm();
-    });
-
-    // Listen to year changes
-    currentYearSelect.addEventListener('change', updateForm);
-
-    // Listen to search input
-    if (searchInput) {
-        searchInput.addEventListener('input', filterSubjectsBySearch);
-    }
-
-    // Initial check
-    updateForm();
-});
-</script>
-</x-app-layout>
Index: sources/views/roadmap/edit.blade.php
===================================================================
--- resources/views/roadmap/edit.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,215 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <!-- Header -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-start">
-                    <div>
-                        <h2 class="font-bold text-3xl text-gray-900">Уреди го твојот Roadmap</h2>
-                        <p class="text-gray-600 mt-2">
-                            <strong class="text-indigo-600">{{ $studyProgram->name_mk }}</strong>
-                            <span class="text-gray-500">({{ $studyProgram->duration_years }} години)</span>
-                        </p>
-                        @if($careerPath)
-                            <div class="mt-3 inline-block bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm font-semibold">
-                                🎯 Кариерна патека: {{ $careerPath->name }}
-                            </div>
-                        @endif
-                    </div>
-                    <a href="{{ route('roadmap.show') }}" class="inline-flex items-center px-4 py-2 bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest hover:bg-gray-300">
-                        ← Назад на roadmap
-                    </a>
-                </div>
-            </div>
-        </div>
-
-        <!-- Form -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <form method="POST" action="{{ route('roadmap.store') }}" id="roadmapForm">
-                    @csrf
-
-                    <!-- STEP 1: Select Program and Career Path -->
-                    <div class="mb-8 pb-8 border-b border-gray-200">
-                        <h3 class="font-bold text-lg text-gray-900 mb-6">Чекор 1: Избор Програма и Кариера</h3>
-
-                        <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-                            <div>
-                                <label for="study_program_id" class="block text-sm font-semibold text-gray-900 mb-2">
-                                    Студирана програма:
-                                </label>
-                                <select name="study_program_id" id="programSelect" class="w-full px-4 py-2 border border-gray-300 rounded-lg" required>
-                                    <option value="">-- Избери програма --</option>
-                                    @foreach($studyPrograms as $program)
-                                        <option value="{{ $program->id }}" {{ $program->id === $studyProgram->id ? 'selected' : '' }}>
-                                            {{ $program->name_mk }} ({{ $program->duration_years }} години)
-                                        </option>
-                                    @endforeach
-                                </select>
-                            </div>
-
-                            <div>
-                                <label for="career_path_id" class="block text-sm font-semibold text-gray-900 mb-2">
-                                    Кариерна патека (опционално):
-                                </label>
-                                <select name="career_path_id" id="careerPathSelect" class="w-full px-4 py-2 border border-gray-300 rounded-lg">
-                                    <option value="">-- Без патека --</option>
-                                    @foreach($careerPaths as $path)
-                                        <option value="{{ $path->id }}" {{ $careerPath && $path->id === $careerPath->id ? 'selected' : '' }}>
-                                            {{ $path->name }}
-                                        </option>
-                                    @endforeach
-                                </select>
-                            </div>
-                        </div>
-                    </div>
-
-                    <!-- STEP 2: Select Completed Subjects -->
-                    <div class="mb-8">
-                        <h3 class="font-bold text-lg text-gray-900 mb-6">Чекор 2: Завршени Предмети</h3>
-                        <div id="completedSubjectsContainer" class="space-y-4">
-                            <p class="text-gray-600">Вчитување на предмети...</p>
-                        </div>
-                    </div>
-
-                    <!-- Submit -->
-                    <div class="flex gap-4">
-                        <button type="submit" class="inline-flex items-center px-6 py-3 bg-indigo-600 border border-transparent rounded-lg font-semibold text-white hover:bg-indigo-700">
-                            🔄 Регенерирај Roadmap
-                        </button>
-                        <a href="{{ route('roadmap.history') }}" class="inline-flex items-center px-6 py-3 bg-gray-200 border border-transparent rounded-lg font-semibold text-gray-700 hover:bg-gray-300">
-                            Откажи
-                        </a>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script>
-// Преходни функции за избор на предмети - исти како во create.blade.php
-const completedIds = @json($completedIds);
-
-document.getElementById('programSelect').addEventListener('change', function() {
-    const programId = this.value;
-
-    if (!programId) {
-        document.getElementById('completedSubjectsContainer').innerHTML = '<p class="text-gray-600">Прво избери програма</p>';
-        return;
-    }
-
-    // Fetch subjects for this program
-    fetch(`/api/study-program/${programId}/subjects`)
-        .then(response => response.json())
-        .then(data => {
-            // The API returns the array directly, not wrapped in a subjects property
-            displaySubjects(data);
-        })
-        .catch(error => console.error('Error:', error));
-});
-
-function displaySubjects(subjects) {
-    // Group by year
-    const subjectsByYear = {};
-
-    subjects.forEach(subject => {
-        if (!subjectsByYear[subject.year]) {
-            subjectsByYear[subject.year] = {
-                winter: [],
-                summer: []
-            };
-        }
-
-        const semester = subject.semester_type === 'winter' ? 'winter' : 'summer';
-        subjectsByYear[subject.year][semester].push(subject);
-    });
-
-    // Display completed subjects
-    let completedHtml = '';
-    Object.keys(subjectsByYear).sort().forEach(year => {
-        completedHtml += `
-            <div class="mb-8">
-                <div class="bg-indigo-100 rounded-lg p-4 mb-4">
-                    <h4 class="font-bold text-lg text-indigo-700">Година ${year}</h4>
-                </div>
-                <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">`;
-
-        // Winter Semester
-        const winterSubjects = subjectsByYear[year].winter;
-        completedHtml += `
-                    <div class="bg-blue-50 rounded-lg p-6 border-l-4 border-blue-600">
-                        <h5 class="font-bold text-lg text-blue-700 mb-4">❄️ Зимски семестар</h5>`;
-
-        if (winterSubjects.length > 0) {
-            completedHtml += '<div class="space-y-3">';
-            winterSubjects.forEach(subject => {
-                const isChecked = completedIds.includes(subject.id) ? 'checked' : '';
-                completedHtml += `
-                    <div class="flex items-start p-3 bg-white rounded border border-blue-200">
-                        <input type="checkbox" name="completed_subjects[]" value="${subject.id}"
-                               class="mt-1 rounded" ${isChecked}>
-                        <div class="ml-3 flex-1">
-                            <p class="font-bold text-gray-900">${subject.code}</p>
-                            <p class="text-gray-700 text-sm">${subject.name}</p>
-                            <span class="inline-block mt-1 bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">
-                                ${subject.credits} ECTS
-                            </span>
-                        </div>
-                    </div>`;
-            });
-            completedHtml += '</div>';
-        } else {
-            completedHtml += '<p class="text-gray-500 text-sm">Нема предмети</p>';
-        }
-
-        completedHtml += `
-                    </div>`;
-
-        // Summer Semester
-        const summerSubjects = subjectsByYear[year].summer;
-        completedHtml += `
-                    <div class="bg-amber-50 rounded-lg p-6 border-l-4 border-amber-600">
-                        <h5 class="font-bold text-lg text-amber-700 mb-4">☀️ Летен семестар</h5>`;
-
-        if (summerSubjects.length > 0) {
-            completedHtml += '<div class="space-y-3">';
-            summerSubjects.forEach(subject => {
-                const isChecked = completedIds.includes(subject.id) ? 'checked' : '';
-                completedHtml += `
-                    <div class="flex items-start p-3 bg-white rounded border border-amber-200">
-                        <input type="checkbox" name="completed_subjects[]" value="${subject.id}"
-                               class="mt-1 rounded" ${isChecked}>
-                        <div class="ml-3 flex-1">
-                            <p class="font-bold text-gray-900">${subject.code}</p>
-                            <p class="text-gray-700 text-sm">${subject.name}</p>
-                            <span class="inline-block mt-1 bg-amber-100 text-amber-800 text-xs px-2 py-1 rounded">
-                                ${subject.credits} ECTS
-                            </span>
-                        </div>
-                    </div>`;
-            });
-            completedHtml += '</div>';
-        } else {
-            completedHtml += '<p class="text-gray-500 text-sm">Нема предмети</p>';
-        }
-
-        completedHtml += `
-                    </div>
-                </div>
-            </div>`;
-    });
-
-    document.getElementById('completedSubjectsContainer').innerHTML = completedHtml;
-}
-
-// Load subjects on page load if program is pre-selected
-window.addEventListener('DOMContentLoaded', function() {
-    const programSelect = document.getElementById('programSelect');
-    if (programSelect.value) {
-        programSelect.dispatchEvent(new Event('change'));
-    }
-});
-</script>
-</x-app-layout>
Index: sources/views/roadmap/no-roadmap.blade.php
===================================================================
--- resources/views/roadmap/no-roadmap.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <!-- Header -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h2 class="font-bold text-3xl text-gray-900">Вашиот Академски Roadmap</h2>
-            </div>
-        </div>
-
-        <!-- Empty State -->
-        <div class="bg-gradient-to-r from-blue-50 to-indigo-50 border-l-4 border-blue-500 p-6 rounded">
-            <p class="text-blue-900 font-semibold text-lg mb-3">
-                📋 Немаш создадено roadmap.
-            </p>
-            <p class="text-blue-800 mb-4">Почни со создавање на твој прв академски roadmap за да го планираш твоето студирање.</p>
-            <a href="{{ route('roadmap.create') }}" class="inline-flex items-center px-4 py-2 bg-blue-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-blue-700">
-                + Создај Roadmap
-            </a>
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/roadmap/show.blade.php
===================================================================
--- resources/views/roadmap/show.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,414 +1,0 @@
-<x-app-layout>
-<div class="py-12">
-    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
-        <!-- Header -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <div class="flex justify-between items-start">
-                    <div>
-                        <h2 class="font-bold text-3xl text-gray-900">Вашиот Академски Roadmap</h2>
-                        <p class="text-gray-600 mt-2 text-lg">
-                            <strong class="text-indigo-600">{{ $studyProgram->name_mk }}</strong>
-                            <span class="text-gray-500">({{ $studyProgram->duration_years }} години)</span>
-                        </p>
-                        @if($studyProgram->name_en)
-                            <p class="text-gray-500 italic">{{ $studyProgram->name_en }}</p>
-                        @endif
-                        @if($careerPath)
-                            <div class="mt-3 inline-block bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm font-semibold">
-                                🎯 Каријерна патека: {{ $careerPath->name }}
-                            </div>
-                        @endif
-                    </div>
-                    <div class="flex gap-2">
-                        @php
-                            // Get the current roadmap for this user and study program
-                            $currentRoadmap = \App\Models\Roadmap::where('user_id', auth()->id())
-                                ->where('study_program_id', $studyProgram->id)
-                                ->first();
-                        @endphp
-                        @if($currentRoadmap)
-                            <a href="{{ route('roadmap.edit', $currentRoadmap) }}" class="inline-flex items-center px-4 py-2 bg-blue-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-blue-700">
-                                ✏️ Уреди
-                            </a>
-                            <form action="{{ route('roadmap.destroy', $currentRoadmap) }}" method="POST" class="inline" onsubmit="return confirm('Дали сте сигурни дека сакате да го избришете овој roadmap?');">
-                                @csrf
-                                @method('DELETE')
-                                <button type="submit" class="inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-700">
-                                    🗑️ Избриши
-                                </button>
-                            </form>
-                        @else
-                            <a href="{{ route('roadmap.create') }}" class="inline-flex items-center px-4 py-2 bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest hover:bg-gray-300">
-                                Создај нов roadmap
-                            </a>
-                        @endif
-                        <a href="{{ route('roadmap.history') }}" class="inline-flex items-center px-4 py-2 bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest hover:bg-gray-300">
-                            📋 Историја
-                        </a>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Progress Summary -->
-        <div class="grid grid-cols-1 gap-6 md:grid-cols-4 mb-6">
-            <div class="bg-green-50 overflow-hidden shadow-sm sm:rounded-lg">
-                <div class="p-6 bg-white border-l-4 border-green-500">
-                    <p class="text-gray-500 text-sm">Завршени</p>
-                    <p class="text-3xl font-bold text-green-600">{{ count($completed) }}</p>
-                </div>
-            </div>
-            <div class="bg-yellow-50 overflow-hidden shadow-sm sm:rounded-lg">
-                <div class="p-6 bg-white border-l-4 border-yellow-500">
-                    <p class="text-gray-500 text-sm">Во процес</p>
-                    <p class="text-3xl font-bold text-yellow-600">{{ count($inProgress) }}</p>
-                </div>
-            </div>
-            <div class="bg-blue-50 overflow-hidden shadow-sm sm:rounded-lg">
-                <div class="p-6 bg-white border-l-4 border-blue-500">
-                    <p class="text-gray-500 text-sm">Преостаток</p>
-                    @php
-                        // Count only mandatory remaining subjects
-                        $remainingMandatory = count(array_filter($roadmap, fn($item) => $item['subject']->subject_type === 'mandatory'));
-                    @endphp
-                    <p class="text-3xl font-bold text-blue-600">{{ $remainingMandatory }}</p>
-                </div>
-            </div>
-            <div class="bg-purple-50 overflow-hidden shadow-sm sm:rounded-lg">
-                <div class="p-6 bg-white border-l-4 border-purple-500">
-                    <p class="text-gray-500 text-sm">Вкупно ECTS</p>
-                    @php
-                        // Calculate ECTS needed based on program duration (60 ECTS per year)
-                        $totalEctsRequired = $studyProgram->duration_years * 60;
-                    @endphp
-                    <p class="text-3xl font-bold text-purple-600">{{ $totalEctsRequired }}</p>
-                </div>
-            </div>
-        </div>
-
-        <!-- ECTS Progress Bar -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
-            <div class="p-6">
-                <h3 class="font-bold text-lg text-gray-900 mb-4">Напредок во ECTS кредити</h3>
-                @php
-                    $completedEcts = 0;
-                    $inProgressEcts = 0;
-
-                    foreach($completed as $subjectId) {
-                        $subject = \App\Models\Subject::find($subjectId);
-                        if($subject) {
-                            $completedEcts += $subject->credits ?? 0;
-                        }
-                    }
-
-                    foreach($inProgress as $subjectId) {
-                        $subject = \App\Models\Subject::find($subjectId);
-                        if($subject) {
-                            $inProgressEcts += $subject->credits ?? 0;
-                        }
-                    }
-
-                    $totalEctsProgress = $completedEcts + $inProgressEcts;
-                    $remainingEcts = $totalEctsRequired - $totalEctsProgress;
-                    $progressPercent = $totalEctsRequired > 0 ? round(($totalEctsProgress / $totalEctsRequired) * 100) : 0;
-                @endphp
-
-                <div class="mb-2 flex justify-between text-sm">
-                    <span class="text-gray-700"><strong>{{ $totalEctsProgress }} / {{ $totalEctsRequired }} ECTS</strong></span>
-                    <span class="text-gray-600">{{ $progressPercent }}%</span>
-                </div>
-
-                <div class="w-full bg-gray-200 rounded-full h-3 overflow-hidden">
-                    <div class="bg-gradient-to-r from-green-500 to-blue-500 h-3 rounded-full" style="width: {{ $progressPercent }}%"></div>
-                </div>
-
-                <div class="mt-4 grid grid-cols-3 gap-4 text-sm">
-                    <div class="bg-green-50 p-3 rounded border border-green-200">
-                        <p class="text-gray-600 text-xs">Завршено</p>
-                        <p class="font-bold text-green-600">{{ $completedEcts }} ECTS</p>
-                    </div>
-                    <div class="bg-yellow-50 p-3 rounded border border-yellow-200">
-                        <p class="text-gray-600 text-xs">Во процес</p>
-                        <p class="font-bold text-yellow-600">{{ $inProgressEcts }} ECTS</p>
-                    </div>
-                    <div class="bg-blue-50 p-3 rounded border border-blue-200">
-                        <p class="text-gray-600 text-xs">Преостаток</p>
-                        <p class="font-bold text-blue-600">{{ $remainingEcts }} ECTS</p>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Semester-by-Semester Roadmap -->
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg mb-6">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h3 class="font-bold text-2xl text-gray-900 mb-8">📅 Предложен roadmap по години и семестри</h3>
-
-                @if(count($semesterRoadmap) > 0)
-                    <div class="space-y-8">
-                        @foreach($semesterRoadmap as $year => $semesters)
-                            <div class="border-l-4 border-indigo-600 pl-6 py-4">
-                                <h4 class="font-bold text-xl text-indigo-700 mb-6">Година {{ $year }}</h4>
-
-                                <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
-                                    <!-- Winter Semester -->
-                                    @if(count($semesters['winter']) > 0)
-                                        <div class="bg-blue-50 rounded-lg p-6 border-l-4 border-blue-600">
-                                            <h5 class="font-bold text-lg text-blue-700 mb-4">❄️ Зимски семестар</h5>
-                                            <div class="space-y-3">
-                                                @foreach($semesters['winter'] as $item)
-                                                    <div class="bg-white p-3 rounded border {{ $item['ready'] ? 'border-green-300' : 'border-gray-300' }}">
-                                                        <div class="flex justify-between items-start">
-                                                            <div class="flex-1">
-                                                                <p class="font-bold text-gray-900">{{ $item['subject']->code }}</p>
-                                                                <p class="text-gray-700 text-sm">{{ $item['subject']->name }}</p>
-                                                                @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
-                                                                    <p class="text-gray-600 text-xs italic">{{ $item['subject']->name_mk }}</p>
-                                                                @endif
-                                                                <p class="text-gray-500 text-xs mt-2">{{ $item['subject']->credits }} ECTS</p>
-                                                            </div>
-                                                            <span class="text-sm font-semibold {{ $item['ready'] ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }} px-2 py-1 rounded whitespace-nowrap ml-2">
-                                                                {{ $item['ready'] ? '✓ Подготвено' : '🔒 Немате предуслов' }}
-                                                            </span>
-                                                        </div>
-                                                        @if(!$item['ready'] && $item['prerequisites']->isNotEmpty())
-                                                            <div class="mt-2 text-xs text-red-700 bg-red-50 p-2 rounded">
-                                                                <p class="font-semibold">Потребни предуслови:</p>
-                                                                <ul class="list-disc list-inside">
-                                                                    @foreach($item['prerequisites'] as $prereq)
-                                                                        <li class="{{ in_array($prereq->id, $completed->toArray()) ? 'line-through text-gray-500' : '' }}"><strong>{{ $prereq->code }}</strong> - {{ $prereq->name }}</li>
-                                                                    @endforeach
-                                                                </ul>
-                                                            </div>
-                                                        @endif
-                                                    </div>
-                                                @endforeach
-                                            </div>
-                                        </div>
-                                    @else
-                                        <div class="bg-blue-50 rounded-lg p-6 border-l-4 border-blue-600 opacity-60">
-                                            <h5 class="font-bold text-lg text-blue-700 mb-2">❄️ Зимски семестар</h5>
-                                            <p class="text-gray-500 text-sm">Нема предмети</p>
-                                        </div>
-                                    @endif
-
-                                    <!-- Summer Semester -->
-                                    @if(count($semesters['summer']) > 0)
-                                        <div class="bg-amber-50 rounded-lg p-6 border-l-4 border-amber-600">
-                                            <h5 class="font-bold text-lg text-amber-700 mb-4">☀️ Летен семестар</h5>
-                                            <div class="space-y-3">
-                                                @foreach($semesters['summer'] as $item)
-                                                    <div class="bg-white p-3 rounded border {{ $item['ready'] ? 'border-green-300' : 'border-gray-300' }}">
-                                                        <div class="flex justify-between items-start">
-                                                            <div class="flex-1">
-                                                                <p class="font-bold text-gray-900">{{ $item['subject']->code }}</p>
-                                                                <p class="text-gray-700 text-sm">{{ $item['subject']->name }}</p>
-                                                                @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
-                                                                    <p class="text-gray-600 text-xs italic">{{ $item['subject']->name_mk }}</p>
-                                                                @endif
-                                                                <p class="text-gray-500 text-xs mt-2">{{ $item['subject']->credits }} ECTS</p>
-                                                            </div>
-                                                            <span class="text-sm font-semibold {{ $item['ready'] ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }} px-2 py-1 rounded whitespace-nowrap ml-2">
-                                                                {{ $item['ready'] ? '✓ Подготвено' : '🔒 Немате предуслов' }}
-                                                            </span>
-                                                        </div>
-                                                        @if(!$item['ready'] && $item['prerequisites']->isNotEmpty())
-                                                            <div class="mt-2 text-xs text-red-700 bg-red-50 p-2 rounded">
-                                                                <p class="font-semibold">Потребни предуслови:</p>
-                                                                <ul class="list-disc list-inside">
-                                                                    @foreach($item['prerequisites'] as $prereq)
-                                                                        <li class="{{ in_array($prereq->id, $completed->toArray()) ? 'line-through text-gray-500' : '' }}"><strong>{{ $prereq->code }}</strong> - {{ $prereq->name }}</li>
-                                                                    @endforeach
-                                                                </ul>
-                                                            </div>
-                                                        @endif
-                                                    </div>
-                                                @endforeach
-                                            </div>
-                                        </div>
-                                    @else
-                                        <div class="bg-amber-50 rounded-lg p-6 border-l-4 border-amber-600 opacity-60">
-                                            <h5 class="font-bold text-lg text-amber-700 mb-2">☀️ Летен семестар</h5>
-                                            <p class="text-gray-500 text-sm">Нема предмети</p>
-                                        </div>
-                                    @endif
-                                </div>
-                            </div>
-                        @endforeach
-                    </div>
-                @else
-                    <div class="bg-gradient-to-r from-green-50 to-blue-50 border-l-4 border-green-500 p-6 rounded">
-                        <p class="text-green-900 font-semibold text-lg">
-                            🎉 Честитки! Ги завршивте сите предмети за <strong>{{ $studyProgram->name_mk }}</strong>!
-                        </p>
-                    </div>
-                @endif
-            </div>
-        </div>
-
-        <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-            <div class="p-6 bg-white border-b border-gray-200">
-                <h3 class="font-bold text-2xl text-gray-900 mb-8">Препорачани следни чекори</h3>
-
-                @if(count($roadmap) > 0)
-                    <div class="space-y-8">
-                        @php
-                            $readySubjects = array_filter($roadmap, fn($item) => $item['ready']);
-                            $blockedSubjects = array_filter($roadmap, fn($item) => !$item['ready']);
-                        @endphp
-
-                        @if(count($readySubjects) > 0)
-                            <div>
-                                <h4 class="font-bold text-xl text-green-700 mb-4">Подготвени за запишување</h4>
-                                <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
-                                    @foreach($readySubjects as $item)
-                                        <div class="border-2 border-green-400 rounded-lg p-4 bg-green-50 hover:shadow-lg transition-shadow">
-                                            <div class="flex justify-between items-start mb-2">
-                                                <div class="flex-1">
-                                                    <p class="font-bold text-gray-900 text-lg">{{ $item['subject']->code }}</p>
-                                                    <p class="text-gray-700 font-semibold">{{ $item['subject']->name }}</p>
-                                                    @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
-                                                        <p class="text-gray-600 text-sm italic">{{ $item['subject']->name_mk }}</p>
-                                                    @endif
-                                                </div>
-                                                <span class="bg-green-600 text-white text-xs px-3 py-1 rounded-full font-semibold whitespace-nowrap ml-2">Подготвено</span>
-                                            </div>
-                                            <div class="mt-3 flex gap-2 flex-wrap">
-                                                <span class="inline-block bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">
-                                                    Година {{ $item['subject']->year }}
-                                                </span>
-                                                <span class="inline-block bg-purple-100 text-purple-800 text-xs px-2 py-1 rounded">
-                                                    {{ $item['subject']->credits ?? 6 }} ECTS
-                                                </span>
-                                                <span class="inline-block bg-{{ $item['type'] === 'mandatory' ? 'red' : 'orange' }}-100 text-{{ $item['type'] === 'mandatory' ? 'red' : 'orange' }}-800 text-xs px-2 py-1 rounded">
-                                                    {{ $item['type'] === 'mandatory' ? 'Задолжителен' : 'Изборен' }}
-                                                </span>
-                                                @if($careerPath && isset($item['inCareerPath']) && $item['inCareerPath'])
-                                                    <span class="inline-block bg-purple-200 text-purple-900 text-xs px-2 py-1 rounded font-semibold">
-                                                        🎯 {{ $careerPath->name }}
-                                                    </span>
-                                                @endif
-                                            </div>
-                                            @if($item['subject']->description)
-                                                <p class="text-gray-600 text-sm mt-3">{{ $item['subject']->description }}</p>
-                                            @endif
-                                        </div>
-                                    @endforeach
-                                </div>
-                            </div>
-                        @endif
-
-                        @if(count($blockedSubjects) > 0)
-                            <div>
-                                <h4 class="font-bold text-xl text-gray-700 mb-4">Невозможни (потребни предуслови)</h4>
-                                <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
-                                    @foreach($blockedSubjects as $item)
-                                        <div class="border-2 border-gray-300 rounded-lg p-4 bg-gray-50 opacity-75">
-                                            <div class="flex justify-between items-start mb-2">
-                                                <div class="flex-1">
-                                                    <p class="font-bold text-gray-900 text-lg">{{ $item['subject']->code }}</p>
-                                                    <p class="text-gray-700 font-semibold">{{ $item['subject']->name }}</p>
-                                                    @if($item['subject']->name_mk && $item['subject']->name_mk !== $item['subject']->name)
-                                                        <p class="text-gray-600 text-sm italic">{{ $item['subject']->name_mk }}</p>
-                                                    @endif
-                                                </div>
-                                                <span class="bg-gray-600 text-white text-xs px-3 py-1 rounded-full font-semibold whitespace-nowrap ml-2">Немате предуслов</span>
-                                            </div>
-
-                                            @if($item['prerequisites']->isNotEmpty())
-                                                <div class="mt-3 p-3 bg-red-50 rounded border border-red-200">
-                                                    <p class="text-sm font-semibold text-red-900 mb-2">Потребни предуслови:</p>
-                                                    <ul class="text-sm text-red-800 space-y-1">
-                                                        @foreach($item['prerequisites'] as $prereq)
-                                                            @php
-                                                                $isCompleted = in_array($prereq->id, $completed->toArray());
-                                                            @endphp
-                                                            <li class="flex items-center">
-                                                                <span class="mr-2">
-                                                                    @if($isCompleted)
-                                                                        <span class="text-green-600">✓</span>
-                                                                    @else
-                                                                        <span class="text-red-600">✗</span>
-                                                                    @endif
-                                                                </span>
-                                                                <span class="{{ $isCompleted ? 'line-through text-gray-500' : '' }}">
-                                                                    <strong>{{ $prereq->code }}</strong> - {{ $prereq->name }}
-                                                                </span>
-                                                            </li>
-                                                        @endforeach
-                                                    </ul>
-                                                </div>
-                                            @endif
-
-                                            <div class="mt-3 flex gap-2 flex-wrap">
-                                                <span class="inline-block bg-blue-100 text-blue-800 text-xs px-2 py-1 rounded">
-                                                    Година {{ $item['subject']->year }}
-                                                </span>
-                                                <span class="inline-block bg-purple-100 text-purple-800 text-xs px-2 py-1 rounded">
-                                                    {{ $item['subject']->credits ?? 6 }} ECTS
-                                                </span>
-                                            </div>
-                                        </div>
-                                    @endforeach
-                                </div>
-                            </div>
-                        @endif
-                    </div>
-                @else
-                    <div class="bg-gradient-to-r from-green-50 to-blue-50 border-l-4 border-green-500 p-6 rounded">
-                        <p class="text-green-900 font-semibold text-lg">
-                            🎉 Честитки! Ги завршивте сите предмети за <strong>{{ $studyProgram->name_mk }}</strong>!
-                        </p>
-                    </div>
-                @endif
-            </div>
-        </div>
-
-        <!-- Completed & In Progress Summary -->
-        <div class="mt-6 grid grid-cols-1 gap-6 md:grid-cols-2">
-            @if(count($completed) > 0)
-                <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-                    <div class="p-6 bg-white border-b border-gray-200">
-                        <h3 class="font-bold text-lg text-gray-900 mb-4">✓ Завршени предмети</h3>
-                        <div class="space-y-2">
-                            @foreach($completed as $subjectId)
-                                @php
-                                    $subject = \App\Models\Subject::find($subjectId);
-                                @endphp
-                                <div class="flex items-center justify-between p-3 bg-green-50 rounded border border-green-200">
-                                    <span class="text-gray-700">
-                                        <strong>{{ $subject->code }}</strong> - {{ $subject->name }}
-                                    </span>
-                                    <span class="text-green-600 font-bold text-lg">✓</span>
-                                </div>
-                            @endforeach
-                        </div>
-                    </div>
-                </div>
-            @endif
-
-            @if(count($inProgress) > 0)
-                <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
-                    <div class="p-6 bg-white border-b border-gray-200">
-                        <h3 class="font-bold text-lg text-gray-900 mb-4">Во процес</h3>
-                        <div class="space-y-2">
-                            @foreach($inProgress as $subjectId)
-                                @php
-                                    $subject = \App\Models\Subject::find($subjectId);
-                                @endphp
-                                <div class="flex items-center justify-between p-3 bg-yellow-50 rounded border border-yellow-200">
-                                    <span class="text-gray-700">
-                                        <strong>{{ $subject->code }}</strong> - {{ $subject->name }}
-                                    </span>
-                                    <span class="text-yellow-600 font-bold text-lg">⏳</span>
-                                </div>
-                            @endforeach
-                        </div>
-                    </div>
-                </div>
-            @endif
-        </div>
-    </div>
-</div>
-</x-app-layout>
Index: sources/views/welcome.blade.php
===================================================================
--- resources/views/welcome.blade.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,102 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
-    <head>
-        <meta charset="utf-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title>FINKI Roadmap</title>
-        @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot')))
-            @vite(['resources/css/app.css', 'resources/js/app.js'])
-        @endif
-    </head>
-    <body class="bg-gray-50">
-        <!-- Header -->
-        <header class="bg-white shadow">
-            <nav class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 flex justify-between items-center">
-                <h1 class="text-2xl font-bold text-indigo-600">🎓 FINKI Roadmap</h1>
-                <div class="flex gap-4">
-                    @auth
-                        <a href="{{ url('/dashboard') }}" class="text-gray-700 hover:text-indigo-600 font-medium">Dashboard</a>
-                    @else
-                        <a href="{{ route('login') }}" class="bg-emerald-700 text-white px-4 py-2 rounded-lg hover:bg-teal-700">Најава</a>
-                        @if (Route::has('register'))
-                            <a href="{{ route('register') }}" class="bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700">Регистрација</a>
-                        @endif
-                    @endauth
-                </div>
-            </nav>
-        </header>
-
-        <!-- Hero Section -->
-        <section class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20">
-            <div class="text-center">
-                <h2 class="text-4xl md:text-5xl font-bold text-gray-900 mb-6">
-                    Планирајте ја вашата академска иднина
-                </h2>
-                <p class="text-xl text-gray-600 mb-8 max-w-2xl mx-auto">
-                    Добредојдовте во FINKI Roadmap, вашиот личен водич за академско совршенство.
-                    Откријте како да изберете изборни предмети што одговараат на вашите кариерни аспирации и да ја оптимизирате вашата академска патека.
-                </p>
-
-                @auth
-                    <a href="{{ route('roadmap.create') }}" class="inline-block bg-indigo-600 text-white px-8 py-3 rounded-lg hover:bg-indigo-700 font-bold">
-                        Создајте го вашиот roadmap
-                    </a>
-                @else
-                    <div class="flex gap-4 justify-center">
-                        <a href="{{ route('register') }}" class="bg-indigo-600 text-white px-8 py-3 rounded-lg hover:bg-indigo-700 font-bold">
-                            Почнете
-                        </a>
-                        <a href="{{ route('login') }}" class="bg-white text-indigo-600 border-2 border-indigo-600 px-8 py-3 rounded-lg hover:bg-indigo-50 font-bold">
-                            Најава
-                        </a>
-                    </div>
-                @endauth
-            </div>
-        </section>
-
-        <!-- Features Section -->
-        <section class="bg-white py-16">
-            <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
-                <h3 class="text-3xl font-bold text-center text-gray-900 mb-12">Зошто да го одберете FINKI Roadmap?</h3>
-
-                <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
-                    <div class="p-8 border border-gray-200 rounded-lg hover:shadow-lg transition">
-                        <h4 class="text-xl font-bold text-indigo-600 mb-4">📚 Паметно планирање</h4>
-                        <p class="text-gray-600">Следете го вашиот напредок и добијте интелигентни препораки за следното семестре.</p>
-                    </div>
-
-                    <div class="p-8 border border-gray-200 rounded-lg hover:shadow-lg transition">
-                        <h4 class="text-xl font-bold text-indigo-600 mb-4">🎯 Избор на изборни предмети</h4>
-                        <p class="text-gray-600">Одберете предмети што се вклопуваат со вашите интереси и будни каријерни цели.</p>
-                    </div>
-
-                    <div class="p-8 border border-gray-200 rounded-lg hover:shadow-lg transition">
-                        <h4 class="text-xl font-bold text-indigo-600 mb-4">📊 Следење на напредокот</h4>
-                        <p class="text-gray-600">Следете ги вашите ECTS кредити и останете информирани за барањата за дипломирање.</p>
-                    </div>
-                </div>
-            </div>
-        </section>
-
-        <!-- CTA Section -->
-        <section class="bg-indigo-600 text-white py-16">
-            <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
-                <h3 class="text-3xl font-bold mb-6">Готови ли сте да ја планирате вашата академска патека?</h3>
-                <p class="text-lg mb-8">Почнете да ја градите вашата персонализирана дорога денес и преземете контрола над вашата академска иднина.</p>
-
-                @guest
-                    <a href="{{ route('register') }}" class="inline-block bg-white text-indigo-600 px-8 py-3 rounded-lg hover:bg-gray-100 font-bold">
-                        Креирајте ваш профил сега (наскоро со CAS интеграција)
-                    </a>
-                @endguest
-            </div>
-        </section>
-
-        <!-- Footer -->
-        <footer class="bg-gray-900 text-gray-300 py-8">
-            <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
-                <p>&copy; 2025 FINKI Roadmap 214004 & 212125 .</p>
-            </div>
-        </footer>
-    </body>
-</html>
Index: routes/auth.php
===================================================================
--- routes/auth.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ routes/auth.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -6,5 +6,4 @@
 use App\Http\Controllers\Auth\EmailVerificationPromptController;
 use App\Http\Controllers\Auth\NewPasswordController;
-use App\Http\Controllers\Auth\PasswordController;
 use App\Http\Controllers\Auth\PasswordResetLinkController;
 use App\Http\Controllers\Auth\RegisteredUserController;
@@ -53,6 +52,4 @@
     Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
 
-    Route::put('password', [PasswordController::class, 'update'])->name('password.update');
-
     Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
         ->name('logout');
Index: routes/settings.php
===================================================================
--- routes/settings.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ routes/settings.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,21 @@
+<?php
+
+use App\Http\Controllers\Settings\PasswordController;
+use App\Http\Controllers\Settings\ProfileController;
+use Illuminate\Support\Facades\Route;
+use Inertia\Inertia;
+
+Route::middleware('auth')->group(function () {
+    Route::redirect('settings', 'settings/profile');
+
+    Route::get('settings/profile', [ProfileController::class, 'edit'])->name('profile.edit');
+    Route::patch('settings/profile', [ProfileController::class, 'update'])->name('profile.update');
+    Route::delete('settings/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
+
+    Route::get('settings/password', [PasswordController::class, 'edit'])->name('password.edit');
+    Route::put('settings/password', [PasswordController::class, 'update'])->name('password.update');
+
+    Route::get('settings/appearance', function () {
+        return Inertia::render('settings/appearance');
+    })->name('appearance');
+});
Index: routes/web.php
===================================================================
--- routes/web.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ routes/web.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,36 +1,17 @@
 <?php
 
-use App\Http\Controllers\ProfileController;
-use App\Http\Controllers\RoadmapController;
-use App\Http\Controllers\SubjectController;
-use App\Http\Controllers\StudyProgramController;
 use Illuminate\Support\Facades\Route;
+use Inertia\Inertia;
 
 Route::get('/', function () {
-    return view('welcome');
+    return Inertia::render('welcome');
+})->name('home');
+
+Route::middleware(['auth', 'verified'])->group(function () {
+    Route::get('dashboard', function () {
+        return Inertia::render('dashboard');
+    })->name('dashboard');
 });
 
-Route::get('/dashboard', function () {
-    return view('dashboard');
-})->middleware(['auth', 'verified'])->name('dashboard');
-
-Route::middleware('auth')->group(function () {
-    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
-    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
-    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
-
-    // Roadmap routes
-    Route::get('/roadmap/history', [RoadmapController::class, 'history'])->name('roadmap.history');
-    Route::get('/roadmap/create', [RoadmapController::class, 'create'])->name('roadmap.create');
-    Route::post('/roadmap', [RoadmapController::class, 'store'])->name('roadmap.store');
-    Route::get('/roadmap/{roadmap}/edit', [RoadmapController::class, 'edit'])->name('roadmap.edit');
-    Route::delete('/roadmap/{roadmap}', [RoadmapController::class, 'destroy'])->name('roadmap.destroy');
-    Route::get('/roadmap', [RoadmapController::class, 'show'])->name('roadmap.show');
-    Route::get('/api/study-program/{programId}/subjects', [RoadmapController::class, 'getSubjectsByProgram'])->name('api.program.subjects');
-
-    // Admin routes
-    Route::resource('subjects', SubjectController::class)->middleware('admin');
-    Route::resource('study-programs', StudyProgramController::class)->middleware('admin');
-});
-
+require __DIR__.'/settings.php';
 require __DIR__.'/auth.php';
Index: raper_output.txt
===================================================================
--- scraper_output.txt	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿Starting FINKI scraper...
-Found 13 study programs
-Processing: ╨í╨╛╤ä╤é╨▓╨╡╤Ç╤ü╨║╨╛ ╨╕╨╜╨╢╨╡╨╜╨╡╤Ç╤ü╤é╨▓╨╛ ╨╕ ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╤ü╨║╨╕ ╤ü╨╕╤ü╤é╨╡╨╝╨╕
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨ÿ╨╜╤é╨╡╤Ç╨╜╨╡╤é, ╨╝╤Ç╨╡╨╢╨╕ ╨╕ ╨▒╨╡╨╖╨▒╨╡╨┤╨╜╨╛╤ü╤é
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨ƒ╤Ç╨╕╨╝╨╡╨╜╨░ ╨╜╨░ ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╤ü╨║╨╕ ╤é╨╡╤à╨╜╨╛╨╗╨╛╨│╨╕╨╕
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨ÿ╨╜╤ä╨╛╤Ç╨╝╨░╤é╨╕╤ç╨║╨░ ╨╡╨┤╤â╨║╨░╤å╨╕╤ÿ╨░
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨Ü╨╛╨╝╨┐╤ÿ╤â╤é╨╡╤Ç╤ü╨║╨╛ ╨╕╨╜╨╢╨╡╨╜╨╡╤Ç╤ü╤é╨▓╨╛
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨Ü╨╛╨╝╨┐╤ÿ╤â╤é╨╡╤Ç╤ü╨║╨╕ ╨╜╨░╤â╨║╨╕
-  Fetching subjects for 4-year program...
-  Γ£ô Processed 13 semesters
-Processing: ╨í╨╛╤ä╤é╨▓╨╡╤Ç╤ü╨║╨╛ ╨╕╨╜╨╢╨╡╨╜╨╡╤Ç╤ü╤é╨▓╨╛ ╨╕ ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╤ü╨║╨╕ ╤ü╨╕╤ü╤é╨╡╨╝╨╕
-  Fetching subjects for 3-year program...
-  Γ£ô Processed 11 semesters
-Processing: ╨ÿ╨╜╤é╨╡╤Ç╨╜╨╡╤é, ╨╝╤Ç╨╡╨╢╨╕ ╨╕ ╨▒╨╡╨╖╨▒╨╡╨┤╨╜╨╛╤ü╤é
-  Fetching subjects for 3-year program...
-    ΓåÆ Created study program: IMB23_3-3Y
-  Γ£ô Processed 11 semesters
-Processing: ╨ƒ╤Ç╨╕╨╝╨╡╨╜╨░ ╨╜╨░ ╨╕╨╜╤ä╨╛╤Ç╨╝╨░╤å╨╕╤ü╨║╨╕ ╤é╨╡╤à╨╜╨╛╨╗╨╛╨│╨╕╨╕
-  Fetching subjects for 3-year program...
-    ΓåÆ Created study program: PIT23_3-3Y
-  Γ£ô Processed 11 semesters
-Processing: ╨Ü╨╛╨╝╨┐╤ÿ╤â╤é╨╡╤Ç╤ü╨║╨╛ ╨╕╨╜╨╢╨╡╨╜╨╡╤Ç╤ü╤é╨▓╨╛
-  Fetching subjects for 3-year program...
-    ΓåÆ Created study program: KI23_3-3Y
-  Γ£ô Processed 11 semesters
-Processing: ╨Ü╨╛╨╝╨┐╤ÿ╤â╤é╨╡╤Ç╤ü╨║╨╕ ╨╜╨░╤â╨║╨╕
-  Fetching subjects for 3-year program...
-    ΓåÆ Created study program: KN23_3-3Y
-  Γ£ô Processed 11 semesters
-Processing: ╨í╤é╤Ç╤â╤ç╨╜╨╕ ╤ü╤é╤â╨┤╨╕╨╕ ╨╖╨░ ╨┐╤Ç╨╛╨│╤Ç╨░╨╝╨╕╤Ç╨░╤Ü╨╡
-  Fetching subjects for 3-year program...
-    ΓåÆ Created study program: SSP23_3-3Y
-  Γ£ô Processed 8 semesters
-Processing: ╨í╤é╤Ç╤â╤ç╨╜╨╕ ╤ü╤é╤â╨┤╨╕╨╕ ╨╖╨░ ╨┐╤Ç╨╛╨│╤Ç╨░╨╝╨╕╤Ç╨░╤Ü╨╡
-  Fetching subjects for 2-year program...
-    ΓåÆ Created study program: SSP23-2Y
-  Γ£ô Processed 6 semesters
-Scraping completed successfully!
Index: orage/finki_subjects/hand_fixed_subjects.json
===================================================================
--- storage/finki_subjects/hand_fixed_subjects.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,3384 +1,0 @@
-[
-    {
-        "subject_file": "pdfs/presmetkovna_biologija.pdf",
-        "name": "Пресметковна биологија",
-        "code": "F18L3S151",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/programski_paradigmi.pdf",
-        "name": "Програмски парадигми",
-        "code": "F18L3W038",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mashinska_vizija.pdf",
-        "name": "Машинска визија",
-        "code": "F18L3W123",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дигитално процесирање на слика",
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/non-relational_databases.pdf",
-        "name": "Non-relational databases",
-        "code": "F18L3S141",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_grafika.pdf",
-        "name": "Компјутерска графика",
-        "code": "F18L2S114",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ],
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/service_oriented_architectures.pdf",
-        "name": "Service Oriented Architectures",
-        "code": "F18L3S155",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/software_quality_and_testing.pdf",
-        "name": "Software quality and testing",
-        "code": "F18L3S019",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Дизајн и архитектура на софтвер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/artificial_intelligence.pdf",
-        "name": "Artificial Intelligence",
-        "code": "F18L2S030",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitalna_forenzika.pdf",
-        "name": "Дигитална форензика",
-        "code": "F18L3S093",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/rabota_so_nadareni_uchenici.pdf",
-        "name": "Работа со надарен и ученици",
-        "code": "F18L3S057",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "ИКТ во образованието"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/geografski_informaciski_sistemi.pdf",
-        "name": "Географски информациски системи",
-        "code": "F18L3S091",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/biznis_i_menadzhment.pdf",
-        "name": "Бизнис и менаџмент",
-        "code": "F18L1W005",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/inteligentni_sistemi.pdf",
-        "name": "Интелигентни системи",
-        "code": "F18L3S107",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/merenje_i_analiza_na_internet_soobrakjaj.pdf",
-        "name": "Мерење и анализа на интернет сообраќај",
-        "code": "F18L3S125",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/avtonomna_robotika.pdf",
-        "name": "Автономна роботика",
-        "code": "F18L3W072",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napreden_veb_dizajn_0.pdf",
-        "name": "Напреден веб дизајн",
-        "code": "F18L3W136",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на веб дизајн"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/visual_programming.pdf",
-        "name": "Visual programming",
-        "code": "F18L2S082",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitizacija.pdf",
-        "name": "Дигитизација",
-        "code": "F18L2W096",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/inzhenerska_matematika.pdf",
-        "name": "Инженерска математика",
-        "code": "F18L2W104",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус 2",
-                "Калкулус"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/programiranje_na_video_igri.pdf",
-        "name": "Програмирање на видео игри",
-        "code": "F18L3W152",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/implementation_of_free_and_open_source_systems.pdf",
-        "name": "Implementation of Free and Open Source Systems",
-        "code": "F18L3W103",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/databases.pdf",
-        "name": "Databases",
-        "code": "F18L3W004",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_definirana_bezbednost.pdf",
-        "name": "Софтверски дефинирана безбедност",
-        "code": "F18L3S159",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност",
-                "Мрежна безбедност"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/diskretni_strukturi_1.pdf",
-        "name": "Дискретни структури 1",
-        "code": "F18L1W031",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/introduction_to_robotics.pdf",
-        "name": "Introduction to robotics",
-        "code": "F18L3W148",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mining_massive_data_sets.pdf",
-        "name": "Mining Massive Data Sets",
-        "code": "F18L3W154",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Паралелно и дистрибуирано процесирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napredni_temi_od_kriptografija.pdf",
-        "name": "Напредни теми од криптогра фија",
-        "code": "F18L3S139",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Криптографија"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/pretpriemnishtvo.pdf",
-        "name": "Претприемништво",
-        "code": "F18L3S028",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/elektronska_i_mobilna_trgovija.pdf",
-        "name": "Електронска и мобилна трговија",
-        "code": "F18L3S025",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/operacioni_istrazhuvanja.pdf",
-        "name": "Операциони истражувања",
-        "code": "F18L3W144",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/administracija_na_bazi_na_podatoci.pdf",
-        "name": "Администрација на бази на податоци",
-        "code": "F18L3W074",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/social_media_networks.pdf",
-        "name": "Social media networks",
-        "code": "F18L3W161",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во мрежна наука"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/computer_graphics.pdf",
-        "name": "Computer graphics",
-        "code": "F18L2S114",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ],
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/biznis_statistika.pdf",
-        "name": "Бизнис статистика",
-        "code": "F18L1S023",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/advanced_web_design.pdf",
-        "name": "Advanced Web Design",
-        "code": "F18L3W136",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на веб дизајн"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/database_administration.pdf",
-        "name": "Database administration",
-        "code": "F18L3W074",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_data_science.pdf",
-        "name": "Introduction to Data Science",
-        "code": "F18L3W008",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис статистика",
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/verojatnost_i_statistika.pdf",
-        "name": "Веројатност и статистика",
-        "code": "F18L2W006",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус",
-                "Калкулус 2",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/veb_bazirani_sistemi.pdf",
-        "name": "Веб базирани системи",
-        "code": "F18L3W079",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_definirani_mrezhi.pdf",
-        "name": "Софтверски дефинирани мрежи",
-        "code": "F18L3W160",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/fundamentals_of_web_design.pdf",
-        "name": "Fundamentals of web design",
-        "code": "F18L1S146",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/paralelno_i_distribuirano_procesiranje.pdf",
-        "name": "Паралелно и дистрибуирано процесирање",
-        "code": "F18L3W037",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ],
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/makedonski_jazik.pdf",
-        "name": "Македонски јазик",
-        "code": "F18L3S069",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/operativni_sistemi.pdf",
-        "name": "Оперативни системи",
-        "code": "F18L2S017",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/virtuelizacija.pdf",
-        "name": "Виртуелизација",
-        "code": "F18L3S062",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ict_for_development.pdf",
-        "name": "ICT for Development",
-        "code": "F18L3S102",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_elektronika.pdf",
-        "name": "Компјутерска електроника",
-        "code": "F18L3W044",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Електрични кола"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/distribuirani_sistemi.pdf",
-        "name": "Дистрибуирани системи",
-        "code": "F18L3W064",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ],
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ikt_za_razvoj.pdf",
-        "name": "ИКТ за развој",
-        "code": "F18L3S102",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_mrezhna_nauka.pdf",
-        "name": "Вовед во мрежна наука",
-        "code": "F18L3S087",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/system_administration.pdf",
-        "name": "System administration",
-        "code": "F18L3W060",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobilni_platformi_i_programiranje.pdf",
-        "name": "Мобилни платформи и програмирање",
-        "code": "F18L3W129",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/blokovski_verigi_i_kriptovaluti.pdf",
-        "name": "Блоковски вериги  и кри птовалути",
-        "code": "F18L3S121",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Криптографија",
-                "Информациска безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_bioinformatikata.pdf",
-        "name": "Вовед во биоинформатиката",
-        "code": "F18L3W085",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење",
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/client_side_inernet_programming.pdf",
-        "name": "Client side Inernet programming",
-        "code": "F18L2W109",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_animacija.pdf",
-        "name": "Компјутерска анимација",
-        "code": "F18L3S113",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_veb_dizajn.pdf",
-        "name": "Основи на веб дизајн",
-        "code": "F18L1S146",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/structural_programming.pdf",
-        "name": "Structural programming",
-        "code": "F18L1W020",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/obrabotka_na_prirodnite_jazici.pdf",
-        "name": "Обработка на природните јазици",
-        "code": "F18L3W142",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/devops.pdf",
-        "name": "DevOps",
-        "code": "F18L3S118",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/professional_skills.pdf",
-        "name": "Professional skills",
-        "code": "F18L1W018",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/kalkulus.pdf",
-        "name": "Калкулус",
-        "code": "F18L1S013",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/introduction_to_bioinformatics.pdf",
-        "name": "Introduction to Bioinformatics",
-        "code": "F18W3S085",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење",
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/research_methodology_in_ict.pdf",
-        "name": "Research methodology in ICT",
-        "code": "F18L3W126",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/intelligent_systems.pdf",
-        "name": "Intelligent systems",
-        "code": "F18L3S107",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kontinuirana_integracija_i_isporaka.pdf",
-        "name": "Континуирана интеграција и испорака",
-        "code": "F18L3S118",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_pattern_recognition.pdf",
-        "name": "Introduction to Pattern Recognition",
-        "code": "F18L3W089",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mashinsko_uchenje.pdf",
-        "name": "Машинско учење",
-        "code": "F18L3S036",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/user_support.pdf",
-        "name": "User support",
-        "code": "F18L2W165",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/web_search_engines.pdf",
-        "name": "Web search engines",
-        "code": "F18L3S080",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Обработка на природните јазици"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/presmetuvanje_vo_oblak.pdf",
-        "name": "Пресметување во облак",
-        "code": "F18L3W068",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Виртуелизација"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/virtualization.pdf",
-        "name": "Virtualization",
-        "code": "F18L3S062",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_mrezhi.pdf",
-        "name": "Компјутерски мрежи",
-        "code": "F18L2W046",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/software_requirements_analysis.pdf",
-        "name": "Software requirements analysis",
-        "code": "F18L2S002",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно ориентирана анализа и дизајн",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_arhitekturi.pdf",
-        "name": "Компјутерски архитектури",
-        "code": "F18L1S045",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/voved_vo_kompjuterskite_nauki.pdf",
-        "name": "Вовед во компјутерските науки",
-        "code": "F18L1W007",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/modeliranje_i_menadzhiranje_na_biznis_procesi.pdf",
-        "name": "Моделирање и менаџирање на бизнис процеси",
-        "code": "F18L3S130",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ],
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/cybersecurity_for_beginners.pdf",
-        "name": "Cybersecurity for Beginners",
-        "code": "F18L1S066",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/mobilni_aplikacii.pdf",
-        "name": "Мобилни апликации",
-        "code": "F18L3S127",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/veb_programiranje.pdf",
-        "name": "Веб програмирање",
-        "code": "F18L3W024",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/economy_for_ict_engineers.pdf",
-        "name": "Economy for ICT engineers",
-        "code": "F18L2S100",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ikt_vo_obrazovanieto.pdf",
-        "name": "ИКТ во образованието",
-        "code": "F18L2S051",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "ИТ системи за учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/sovremeni_kompjuterski_arhitekturi.pdf",
-        "name": "Современи компјутерски архитектури",
-        "code": "F18L3S158",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softver_za_vgradlivi_sistemi.pdf",
-        "name": "Софтвер за вградливи системи",
-        "code": "F18L3W048",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/business_process_modeling_and_management.pdf",
-        "name": "Business process modeling and management",
-        "code": "F18L3S130",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ],
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/crowd-sourcing_and_human_computing.pdf",
-        "name": "Crowd-sourcing and human computing",
-        "code": "F18L3S162",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/distribuirano_skladiranje_na_podatoci.pdf",
-        "name": "Дистрибуирано складирање на податоци",
-        "code": "F18L3W098",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ],
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/teorija_na_informacii_so_digitalni_komunikacii.pdf",
-        "name": "Теорија на информации со дигитални комуникации",
-        "code": "F18L2S164",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/nestrukturirani_bazi_na_podatoci.pdf",
-        "name": "Неструктурирани бази на податоци",
-        "code": "F18L3S141",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobile_information_systems.pdf",
-        "name": "Mobile Information Systems",
-        "code": "F18L3W128",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/visualization.pdf",
-        "name": "Visualization",
-        "code": "F18L3W081",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/object_oriented_analysis_and_design.pdf",
-        "name": "Object Oriented Analysis and Design",
-        "code": "F18L1S015",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/administracija_na_sistemi.pdf",
-        "name": "Администрација на системи",
-        "code": "F18L3W060",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/arhitektura_i_organizacija_na_kompjuteri.pdf",
-        "name": "Архитектура и организација на компјутери",
-        "code": "F18L1S003",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/advanced_human_computer_interaction.pdf",
-        "name": "Advanced Human Computer Interaction",
-        "code": "F18L3W137",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/natural_language_processing.pdf",
-        "name": "Natural language processing",
-        "code": "F18L3W142",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitalna_postprodukcija.pdf",
-        "name": "Дигитална постпродукција",
-        "code": "F18L3W092",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дигитално процесирање на слика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/integrated_systems.pdf",
-        "name": "Integrated Systems",
-        "code": "F18L3S012",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Анализа на софтверските барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/socijalni_mrezhi_i_mediumi.pdf",
-        "name": "Социјални мрежи и медиуми",
-        "code": "F18L3W161",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во мрежна наука"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/odrzhlivi_i_energetski_efikasni_kompjuterski_sistemi.pdf",
-        "name": "Одржливи и енергетски ефикасни компјутерски",
-        "code": "F18L2S143",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски компоненти"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_naukata_za_podatoci.pdf",
-        "name": "Вовед во науката за податоци",
-        "code": "F18L3W008",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис статистика",
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/information_theory_and_digital_communications.pdf",
-        "name": "Information theory and digital communications",
-        "code": "F18L2S164",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/analiza_i_dizajn_na_is.pdf",
-        "name": "Анализа и дизајн на ИС",
-        "code": "F18L3W075",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/inovacii_vo_ikt.pdf",
-        "name": "Иновации во ИКТ",
-        "code": "F18L3W105",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_kognitivni_nauki.pdf",
-        "name": "Вовед во когнитивни науки",
-        "code": "F18L3S086",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција",
-                "Вовед во науката за податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/operating_systems.pdf",
-        "name": "Operating systems",
-        "code": "F18L2S017",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kreativni_veshtini_za_reshavanje_problemi.pdf",
-        "name": "Креативни вештини за решавање проблеми",
-        "code": "F18L1S120",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/veb_prebaruvachki_sistemi.pdf",
-        "name": "Веб пребарувачки системи",
-        "code": "F18L3S080",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Обработка на природните јазици"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napreden_veb_dizajn.pdf",
-        "name": "Напреден веб дизајн",
-        "code": "CSEW522",
-        "level": 5,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/bazi_na_podatoci.pdf",
-        "name": "Бази на податоци",
-        "code": "F18L3W004",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_algoritmi.pdf",
-        "name": "Дизајн на алгоритми",
-        "code": "F18L2S097",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/blockchain_and_cryptocurrencies.pdf",
-        "name": "Blockchain and cryptocurrencies",
-        "code": "F18L3S121",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Криптографија",
-                "Информациска безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/information_systems_analysis_and_design.pdf",
-        "name": "Information Systems Analysis and Design",
-        "code": "F18L3W075",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/video_games_programming.pdf",
-        "name": "Video games programming",
-        "code": "F18L3W152",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/information_security.pdf",
-        "name": "Information security",
-        "code": "F18L3W043",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/metodika_na_informatikata.pdf",
-        "name": "Методика на информатиката",
-        "code": "F18L3S054",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/agentno-bazirani_sistemi.pdf",
-        "name": "Агентно-базирани системи",
-        "code": "F18L3S073",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napredni_bazi_na_podatoci.pdf",
-        "name": "Напредни бази на податоци",
-        "code": "F18L3S138",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/advanced_databases.pdf",
-        "name": "Advanced Databases",
-        "code": "F18L3S138",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/software_defined_networks.pdf",
-        "name": "Software defined networks",
-        "code": "F18L3W160",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_na_neshtata.pdf",
-        "name": "Интернет на нештата",
-        "code": "F18L3W108",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ],
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_teorijata_na_informacii.pdf",
-        "name": "Основи на теоријата на информации",
-        "code": "F18L2W067",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/servisno_orientirani_arhitekturi.pdf",
-        "name": "Сервисно ориентирани архитектури",
-        "code": "F18L3S155",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/statistichko_modeliranje.pdf",
-        "name": "Статистичко моделирање",
-        "code": "F18L3S163",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/vgradlivi_mikroprocesorski_sistemi.pdf",
-        "name": "Вградливи микропроцесорски системи",
-        "code": "F18L3S040",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/management_information_systems.pdf",
-        "name": "Management Information Systems",
-        "code": "F18L3W027",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_digitalni_kola_0.pdf",
-        "name": "Дизајн на дигитални кола",
-        "code": "F18L1W041",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/machine_learning.pdf",
-        "name": "Machine learning",
-        "code": "F18L3S036",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobile_applications.pdf",
-        "name": "Mobile Applications",
-        "code": "F18L3S127",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/vizuelizacija.pdf",
-        "name": "Визуелизација",
-        "code": "F18L3W081",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/podatochno_rudarstvo.pdf",
-        "name": "Податочно рударство",
-        "code": "F18L3S150",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика",
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/algoritmi_i_podatochni_strukturi.pdf",
-        "name": "Алгоритми и податочни структури",
-        "code": "F18L2W001",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/metodologija_na_istrazhuvanjeto_vo_ikt.pdf",
-        "name": "Методологија на истражувањето во ИКТ",
-        "code": "F18L3W126",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_stochastic_processes.pdf",
-        "name": "Introduction to Stochastic Processes",
-        "code": "F18L2S090",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/autonomous_robotics.pdf",
-        "name": "Autonomous robotics",
-        "code": "F18L3W072",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kalkulus_1.pdf",
-        "name": "Калкулус 1",
-        "code": "F18L1W033",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/formalni_jazici_i_avtomati.pdf",
-        "name": "Формални јазици и автомати",
-        "code": "F18L3S039",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Структурно програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/elektrichni_kola.pdf",
-        "name": "Електрични кола",
-        "code": "F18L2S042",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/infrastrukturno_programiranje.pdf",
-        "name": "Инфраструктурно програмирање",
-        "code": "F18L3S111",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Администрација на системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/implementacija_na_sistemi_so_sloboden_i_otvoren_kod.pdf",
-        "name": "Имплементација на системи со слободен и отворен код",
-        "code": "F18L3W103",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digital_post-production.pdf",
-        "name": "Digital Post-production",
-        "code": "F18L3W092",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дигитално процесирање на слика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/agent-based_systems.pdf",
-        "name": "Agent-based systems",
-        "code": "F18L3S073",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/diskretna_matematika.pdf",
-        "name": "Дискретна математика",
-        "code": "F18L1W011",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/data_mining.pdf",
-        "name": "Data mining",
-        "code": "F18L3S150",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика",
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/objektno_orientirana_analiza_i_dizajn.pdf",
-        "name": "Објектно ориентирана анализа и дизајн",
-        "code": "F18L1S015",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/discrete_mathematics.pdf",
-        "name": "Discrete Mathematics",
-        "code": "F18L1W011",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/objektno-orientirano_programiranje.pdf",
-        "name": "Објектно-ориентирано програмирање",
-        "code": "F18L1S016",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/mobilni_informaciski_sistemi.pdf",
-        "name": "Мобилни информациски системи",
-        "code": "F18L3W128",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/integrirani_sistemi.pdf",
-        "name": "Интегрирани системи",
-        "code": "F18L3S012",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Анализа на софтверските барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_pametni_gradovi.pdf",
-        "name": "Вовед во паметни градови",
-        "code": "F18L3W088",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_i_arhitektura_na_softver.pdf",
-        "name": "Дизајн и архитектура на софтвер",
-        "code": "F18L3W009",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Анализа на софтверските барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/analiza_na_softverskite_baranja.pdf",
-        "name": "Анализа на софтверските барања",
-        "code": "F18L2S002",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно ориентирана анализа и дизајн",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/rudarenje_na_masivni_podatoci.pdf",
-        "name": "Рударење на масивни податоци",
-        "code": "F18L3W154",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Паралелно и дистрибуирано процесирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_technologies.pdf",
-        "name": "Internet technologies",
-        "code": "F18L2S110",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/e-vlada.pdf",
-        "name": "Е-влада",
-        "code": "F18L2S099",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/spodeluvanje_i_presmetuvanje_vo_tolpa.pdf",
-        "name": "Споделување и пресметување во толпа",
-        "code": "F18L3S162",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/e-government.pdf",
-        "name": "E-government",
-        "code": "F18L2S099",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/diskretni_strukturi_2.pdf",
-        "name": "Дискретни структури 2",
-        "code": "F18L1S032",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/paralelno_programiranje.pdf",
-        "name": "Паралелно програмирање",
-        "code": "F18L3S149",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/sistemi_za_poddrshka_pri_odluchuvanjeto.pdf",
-        "name": "Системи за поддршка при одлучувањето",
-        "code": "F18L3W156",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција",
-                "Вовед во науката за податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/profesionalni_veshtini.pdf",
-        "name": "Професионални вештини",
-        "code": "F18L1W018",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/programski_jazici_i_kompajleri.pdf",
-        "name": "Програмски јазици и компајлери",
-        "code": "F18L3S112",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Формални јазици и автомати"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/software_for_embedded_systems.pdf",
-        "name": "Software for embedded systems",
-        "code": "F18L3W048",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_network_science.pdf",
-        "name": "Introduction to network science",
-        "code": "F18L3S087",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/virtual_reality.pdf",
-        "name": "Virtual reality",
-        "code": "F18L3S083",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/electronic_and_mobile_commerce.pdf",
-        "name": "Electronic and Mobile Commerce",
-        "code": "F18L3S025",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/web_programming.pdf",
-        "name": "Web Programming",
-        "code": "F18L3W024",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/vizuelno_programiranje.pdf",
-        "name": "Визуелно програмирање",
-        "code": "F18L2S082",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_etika.pdf",
-        "name": "Компјутерска етика",
-        "code": "F18L3W053",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Напредно програмирање",
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_mrezhi_i_bezbednost.pdf",
-        "name": "Компјутерски мрежи и безбедност",
-        "code": "F18L2W014",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_kvalitet_i_testiranje.pdf",
-        "name": "Софтверски квалитет и тестирање",
-        "code": "F18L3S019",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Дизајн и архитектура на софтвер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/veshtachka_inteligencija.pdf",
-        "name": "Вештачка интелигенција",
-        "code": "F18L2S030",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_ekoinformatikata.pdf",
-        "name": "Вовед во екоинформатиката",
-        "code": "F18L2S084",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/skladovi_na_podatoci_i_analitichka_obrabotka.pdf",
-        "name": "Складови на податоци и аналитичка обработка",
-        "code": "F18L3S157",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ekonomija_za_ikt_inzheneri.pdf",
-        "name": "Економија за ИКТ инженери",
-        "code": "F18L2S100",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/cloud_computing.pdf",
-        "name": "Cloud computing",
-        "code": "F18L3W068",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Виртуелизација"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/data_warehouses_and_olap.pdf",
-        "name": "Data Warehouses and OLAP",
-        "code": "F18L3S157",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_interakcijata_chovek-kompjuter.pdf",
-        "name": "Дизајн на интеракцијата човек-компјутер",
-        "code": "F18L3S010",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/virtuelna_realnost.pdf",
-        "name": "Виртуелна реалност",
-        "code": "F18L3S083",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/wireless_multimedia_systems.pdf",
-        "name": "Wireless Multimedia Systems",
-        "code": "F18L3S077",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Безжични и мобилни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/modern_robotics_trends.pdf",
-        "name": "Modern robotics trends",
-        "code": "F18L3S132",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Автономна роботика",
-                "Процесна роботика",
-                "Машинско учење"
-            ],
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_smart_cities.pdf",
-        "name": "Introduction to Smart Cities",
-        "code": "F18L3W088",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimediski_sistemi.pdf",
-        "name": "Мултимедиски системи",
-        "code": "F18L3S135",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/shabloni_za_dizajn_na_korisnichki_interfejsi.pdf",
-        "name": "Шаблони за дизајн на кориснички интерфејси",
-        "code": "F18L2W167",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napredna_interakcija_chovek_kompjuter.pdf",
-        "name": "Напредна интеракција човек компјутер",
-        "code": "F18L3W137",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mrezhna_i_mobilna_forenzika.pdf",
-        "name": "Мрежна и мобилна форензика",
-        "code": "F18L3W133",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи и безбедност",
-                "Мрежна безбедност"
-            ],
-            [
-                "Безжични и мобилни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/algorithms_and_data_structures.pdf",
-        "name": "Algorithms and Data Structures",
-        "code": "F18L2W001",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/innovation_in_ict.pdf",
-        "name": "Innovation in ICT",
-        "code": "F18L3W105",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mediumi_i_komunikacii.pdf",
-        "name": "Медиуми и комуникации",
-        "code": "F18L2S124",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/decision_support_systems.pdf",
-        "name": "Decision support systems",
-        "code": "F18L3W156",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција",
-                "Вовед во науката за податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/engineering_mathematics.pdf",
-        "name": "Еngineering mathematics",
-        "code": "F18L2W104",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус 2",
-                "Калкулус"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/upravuvanje_so_tehnichkata_poddrshka.pdf",
-        "name": "Управување со техничката поддршка",
-        "code": "F18L2W165",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/menadzhment_informaciski_sistemi.pdf",
-        "name": "Менаџмент информациски системи",
-        "code": "F18L3W027",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/moderni_trendovi_vo_robotika.pdf",
-        "name": "Модерни трендови во роботика",
-        "code": "F18L3S132",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Автономна роботика",
-                "Процесна роботика",
-                "Машинско учење"
-            ],
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/concepts_of_information_society.pdf",
-        "name": "Concepts of Information Society",
-        "code": "F18L2S119",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/koncepti_na_informatichko_opshtestvo.pdf",
-        "name": "Концепти на информатичко општество",
-        "code": "F18L2S119",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_prepoznavanje_na_oblici.pdf",
-        "name": "Вовед во препознавање на облици",
-        "code": "F18L3W089",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/electric_circuits.pdf",
-        "name": "Electric Circuits",
-        "code": "F18L2S042",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/computer_ethics.pdf",
-        "name": "Computer ethics",
-        "code": "F18L3W053",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Напредно програмирање",
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/administracija_na_mrezhi.pdf",
-        "name": "Администрација на мрежи",
-        "code": "F18L3S059",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/procesna_robotika.pdf",
-        "name": "Процесна роботика",
-        "code": "F18L3S153",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/timski_proekt.pdf",
-        "name": "Тимски проект",
-        "code": "F18L3W021",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mrezhna_bezbednost.pdf",
-        "name": "Мрежна безбедност",
-        "code": "F18L3W065",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/computer_networks_and_security.pdf",
-        "name": "Computer Networks and Security",
-        "code": "F18L2W014",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimediski_mrezhi.pdf",
-        "name": "Мултимедиски мрежи",
-        "code": "F18L3W134",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/inteligentni_informaciski_sistemi.pdf",
-        "name": "Интелигентни информациски системи",
-        "code": "F18L3S106",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/calculus_2.pdf",
-        "name": "Calculus 2",
-        "code": "F18L1S034",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/software_defined_security.pdf",
-        "name": "Software defined security",
-        "code": "F18L3S159",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност",
-                "Мрежна безбедност"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/puzzle_based_learning.pdf",
-        "name": "Puzzle based learning",
-        "code": "F18L1S120",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_sajber_bezbednosta.pdf",
-        "name": "Основи на сајбер безбедноста",
-        "code": "F18L1S066",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/optichki_mrezhi.pdf",
-        "name": "Оптички мрежи",
-        "code": "F18L3W145",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/bezzhichni_i_mobilni_sistemi.pdf",
-        "name": "Безжични и мобилни системи",
-        "code": "F18L2S061",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/geographic_information_systems.pdf",
-        "name": "Geographic Information Systems",
-        "code": "F18L3S091",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/fizika.pdf",
-        "name": "Физика",
-        "code": "F18L1W049",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/internet_programiranje_na_klientska_strana.pdf",
-        "name": "Интернет програмирање на клиентска страна",
-        "code": "F18L2W109",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/embedded_microprocessor_systems.pdf",
-        "name": "Embedded microprocessor systems",
-        "code": "F18L3S040",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_tehnologii.pdf",
-        "name": "Интернет технологии",
-        "code": "F18L2S110",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/calculus.pdf",
-        "name": "Calculus",
-        "code": "F18L1S013",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/ict_project_management.pdf",
-        "name": "ICT Project Management",
-        "code": "F18L3S022",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/introduction_to_ecoinformatics.pdf",
-        "name": "Introduction to Ecoinformatics",
-        "code": "F18L3S084",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobile_platforms_and_programming.pdf",
-        "name": "Mobile platforms and programming",
-        "code": "F18L3W129",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/psihologija_na_uchilishna_vozrast.pdf",
-        "name": "Психологија на училишна возраст",
-        "code": "F18L3S071",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/etichko_hakiranje.pdf",
-        "name": "Етичко хакирање",
-        "code": "F18L3S101",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност",
-                "Мрежна безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/marketing.pdf",
-        "name": "Маркетинг",
-        "code": "F18L1S026",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/object_oriented_programming.pdf",
-        "name": "Object oriented programming",
-        "code": "F18L1S016",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/computer_animation.pdf",
-        "name": "Computer Animation",
-        "code": "F18L3S113",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/algorithm_design.pdf",
-        "name": "Algorithm design",
-        "code": "F18L2S097",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/computer_audio_speech_and_music.pdf",
-        "name": "Computer audio, speech and music",
-        "code": "F18L3W115",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/web_based_systems.pdf",
-        "name": "Web Based Systems",
-        "code": "F18L3W079",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/informaciska_bezbednost.pdf",
-        "name": "Информациска безбедност",
-        "code": "F18L3W043",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/linearna_algebra_i_primeni.pdf",
-        "name": "Линеарна алгебра и примени",
-        "code": "F18L3W035",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/upravuvanje_so_ikt_proekti.pdf",
-        "name": "Управување со ИКТ проекти",
-        "code": "F18L3S022",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kriptografija.pdf",
-        "name": "Криптографија",
-        "code": "F18L3S122",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Дискретни структури 2",
-                "Дискретна математика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/uchenje_na_dalechina.pdf",
-        "name": "Учење на далечина",
-        "code": "F18L3S166",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "ИКТ во образованието"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/biology_inspired_computing.pdf",
-        "name": "Biology inspired computing",
-        "code": "F18L3S078",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ],
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/pedagogija.pdf",
-        "name": "Педагогија",
-        "code": "F18L1W070",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/probability_and_statistics.pdf",
-        "name": "Probability and statistics",
-        "code": "F18L2W006",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус",
-                "Калкулус 2",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/strukturno_programiranje.pdf",
-        "name": "Структурно програмирање",
-        "code": "F18L1W020",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/napredno_programiranje.pdf",
-        "name": "Напредно програмирање",
-        "code": "F18L2W140",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_komponenti.pdf",
-        "name": "Компјутерски компоненти",
-        "code": "F18L1S116",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_poddrzhano_proizvodstvo.pdf",
-        "name": "Компјутерски поддржано производство",
-        "code": "F18L3W117",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/business_and_management.pdf",
-        "name": "Business and Management",
-        "code": "F18L1W005",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/bezzhichni_multimediski_sistemi.pdf",
-        "name": "Безжични мултимедиски системи",
-        "code": "F18L3S077",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Безжични и мобилни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitalni_biblioteki.pdf",
-        "name": "Дигитални библиотеки",
-        "code": "F18L3S094",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ],
-            [
-                "Интернет програмирање на клиентска страна",
-                "Интернет технологии",
-                "Веб програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_robotikata.pdf",
-        "name": "Основи на роботиката",
-        "code": "F18L3W148",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digital_forensics.pdf",
-        "name": "Digital Forensics",
-        "code": "F18L3S093",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/intelligent_information_systems.pdf",
-        "name": "Intelligent Information Systems",
-        "code": "F18L3S106",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/computer_components.pdf",
-        "name": "Computer Components",
-        "code": "F18L1S116",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/operations_research.pdf",
-        "name": "Operations research",
-        "code": "F18L3W144",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softversko_inzhenerstvo.pdf",
-        "name": "Софтверско инженерство",
-        "code": "F18L2S029",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/software_design_and_architecture.pdf",
-        "name": "Software Design and Architecture",
-        "code": "F18L3W009",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Анализа на софтверските барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/user_interfaces_design_patterns.pdf",
-        "name": "User interfaces design patterns",
-        "code": "F18L2W167",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_komunikaciski_sistemi.pdf",
-        "name": "Основи на комуникациски системи",
-        "code": "F18L2W147",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Калкулус",
-                "Калкулус 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/parallel_programming.pdf",
-        "name": "Parallel programming",
-        "code": "F18L3S149",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/bioloshki_inspirirano_presmetuvanje.pdf",
-        "name": "Биолошки инспирирано пресметување",
-        "code": "F18L3S078",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ],
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/modeliranje_i_simulacija.pdf",
-        "name": "Моделирање и симулација",
-        "code": "F18L3W131",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_zvuk_govor_i_muzika.pdf",
-        "name": "Компјутерски звук, говор и музика",
-        "code": "F18L3W115",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_analiza_na_vremenskite_serii.pdf",
-        "name": "Вовед во анализа на временските серии",
-        "code": "F18L3W076",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во случајни процеси",
-                "Статистичко моделирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/wireless_mobile_systems.pdf",
-        "name": "Wireless mobile systems",
-        "code": "F18L2S061",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/human-computer_interaction_design.pdf",
-        "name": "Human-computer interaction design",
-        "code": "F18L3S010",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/marketing_0.pdf",
-        "name": "Marketing",
-        "code": "F18L1S026",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/it_sistemi_za_uchenje.pdf",
-        "name": "ИТ системи за учење",
-        "code": "F18L1S052",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/multimedia_systems.pdf",
-        "name": "Multimedia systems",
-        "code": "F18L3S135",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_sluchajni_procesi.pdf",
-        "name": "Вовед во случајни процеси",
-        "code": "F18L2S090",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теоријата на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/linear_algebra_and_applications.pdf",
-        "name": "Linear algebra and applications",
-        "code": "F18L3W035",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/machine_vision.pdf",
-        "name": "Machine Vision",
-        "code": "F18L3W123",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дигитално процесирање на слика",
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/entrepreneurship.pdf",
-        "name": "Entrepreneurship",
-        "code": "F18L3S028",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/formal_languages_and_automata.pdf",
-        "name": "Formal languages and automata",
-        "code": "F18L3S039",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Структурно програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimedia_networks.pdf",
-        "name": "Multimedia Networks",
-        "code": "F18L3W134",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/procesiranje_na_signalite.pdf",
-        "name": "Процесирање на сигналите",
-        "code": "F18L3S047",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Инженерска математика",
-                "Калкулус 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kalkulus_2.pdf",
-        "name": "Калкулус 2",
-        "code": "F18L1S034",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/personalizirano_uchenje.pdf",
-        "name": "Персонализирано учење",
-        "code": "F18L3S056",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "ИКТ во образованието"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimedijalni_tehnologii.pdf",
-        "name": "Мултимедија лни технологии",
-        "code": "F18L3W055",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitalno_procesiranje_na_slika.pdf",
-        "name": "Дигитално процесирање на слика",
-        "code": "F18L2S095",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/iot.pdf",
-        "name": "IoT",
-        "code": "F18L3W108",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ],
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_obrazoven_softver.pdf",
-        "name": "Дизајн на образовен софтвер",
-        "code": "F18L3W050",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "ИКТ во образованието"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/signal_processing.pdf",
-        "name": "Signal processing",
-        "code": "F18L3S047",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Инженерска математика",
-                "Калкулус 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_kompjuterski_mrezhi.pdf",
-        "name": "Дизајн на компјутерски мрежи",
-        "code": "F18L3S063",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи"
-            ]
-        ]
-    }
-]
Index: orage/finki_subjects/majors.json
===================================================================
--- storage/finki_subjects/majors.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,4455 +1,0 @@
-[
-  {
-    "major": "Интернет, мрежи и безбедност",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Бизнис и менаџмент",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во компјутерските науки",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Дискретна математика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски архитектури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Основи на сајбер безбедноста",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Бизнис статистика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Основи на теоријата на информации",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Инженерска математика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на комуникациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Безжични и мобилни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во случајни процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Одржливи и енергетски ефикасни компјутерски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверско инженерство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Администрација на системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Мрежна безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно и дистрибуирано процесирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Администрација на мрежи",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Агентно-базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вградливи микропроцесорски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во мрежна наука",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електронска и мобилна трговија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Инфраструктурно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Криптографија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мерење и анализа на интернет сообраќај",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирана безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дистрибуирани системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Пресметување во облак",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Администрација на бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Анализа и дизајн на ИС",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во паметни градови",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дистрибуирано складирање на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Иновации во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мрежна и мобилна форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Оптички мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирани мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дизајн на компјутерски мрежи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб пребарувачки системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Географски информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Етичко хакирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Моделирање и менаџирање на бизнис процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Модерни трендови во роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни теми од криптографија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Складови на податоци и аналитичка обработка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Компјутерска едукација",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Вовед во компјутерските науки",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дискретна математика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Педагогија",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "ИТ системи за учење",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски архитектури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Бизнис статистика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи и безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Мултимедијални технологии",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веројатност и статистика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Шаблони за дизајн на кориснички интерфејси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "ИКТ во образованието",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на алгоритми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Е-влада",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електрични кола",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска графика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверско инженерство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дизајн на образовен софтвер",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Напреден веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Персонализирано учење",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Психологија на училишна возраст",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Работа со надарени ученици",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитални библиотеки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски квалитет и тестирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Учење на далечина",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Самостоен проект",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет на нештата",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредна интеракција човек компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмирање на видео игри",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Социјални мрежи и медиуми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Македонски јазик",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Методика на информатиката",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелна реалност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во когнитивни науки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска анимација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Компјутерски науки",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Вовед во компјутерските науки",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дискретни структури 1",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус 1",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Архитектура и организација на компјутери",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дискретни структури 2",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веројатност и статистика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи и безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Инженерска математика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Шаблони за дизајн на кориснички интерфејси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Софтверско инженерство",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Анализа на софтверските барања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични и мобилни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во случајни процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитално процесирање на слика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на алгоритми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електрични кола",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска графика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Теорија на информации со дигитални комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно и дистрибуирано процесирање",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн и архитектура на софтвер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мрежна безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напреден веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинско учење",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Формални јазици и автомати",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Агентно-базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вградливи микропроцесорски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во мрежна наука",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Географски информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електронска и мобилна трговија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интегрирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Криптографија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мерење и анализа на интернет сообраќај",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Податочно рударство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Процесирање на сигналите",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Процесна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Современи компјутерски архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски квалитет и тестирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Статистичко моделирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Програмски парадигми",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Автономна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Анализа и дизајн на ИС",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во анализа на временските серии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во паметни градови",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во препознавање на облици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дистрибуирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет на нештата",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Менаџмент информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Моделирање и симулација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредна интеракција човек компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Обработка на природните јазици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Операциони истражувања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Оптички мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Пресметување во облак",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмирање на видео игри",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Рударење на масивни податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Системи за поддршка при одлучувањето",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтвер за вградливи системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Социјални мрежи и медиуми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Биолошки инспирирано пресметување",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб пребарувачки системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелна реалност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во когнитивни науки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "ИКТ за развој",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска анимација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Модерни трендови во роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни теми од криптографија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Пресметковна биологија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмски јазици и компајлери",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Складови на податоци и аналитичка обработка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Компјутерско инженерство",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Дизајн на дигитални кола",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус 1",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Физика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Дискретна математика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски архитектури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на сајбер безбедноста",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веројатност и статистика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Инженерска математика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на комуникациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Шаблони за дизајн на кориснички интерфејси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Електрични кола",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Софтверско инженерство",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Анализа на софтверските барања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични и мобилни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во случајни процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитално процесирање на слика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на алгоритми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска графика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Одржливи и енергетски ефикасни компјутерски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Теорија на информации со дигитални комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска електроника",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн и архитектура на софтвер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мрежна безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напреден веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно и дистрибуирано процесирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 4,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Вградливи микропроцесорски системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Процесирање на сигналите",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Агентно-базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во мрежна наука",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интегрирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Криптографија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинско учење",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мерење и анализа на интернет сообраќај",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Податочно рударство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Процесна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Современи компјутерски архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски квалитет и тестирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Статистичко моделирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Софтвер за вградливи системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Автономна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во паметни градови",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во препознавање на облици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дистрибуирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дистрибуирано складирање на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет на нештата",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски поддржано производство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Менаџмент информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Моделирање и симулација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мрежна и мобилна форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредна интеракција човек компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Операциони истражувања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Оптички мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Пресметување во облак",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмирање на видео игри",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмски парадигми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Социјални мрежи и медиуми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Биолошки инспирирано пресметување",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб пребарувачки системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелна реалност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во когнитивни науки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на компјутерски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Етичко хакирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска анимација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Модерни трендови во роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Примена на информациски технологии",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Бизнис и менаџмент",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во компјутерските науки",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дискретна математика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Архитектура и организација на компјутери",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Бизнис статистика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "ИТ системи за учење",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Калкулус",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи и безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дигитизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Економија за ИКТ инженери",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Шаблони за дизајн на кориснички интерфејси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Софтверско инженерство",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Анализа на софтверските барања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични и мобилни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во случајни процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на алгоритми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Е-влада",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електрични кола",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска графика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Концепти на информатичко општество",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн и архитектура на софтвер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напреден веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Електронска и мобилна трговија",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Агентно-базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вградливи микропроцесорски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во мрежна наука",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Географски информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интегрирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинско учење",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Податочно рударство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирана безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски квалитет и тестирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Менаџмент информациски системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Тимски проект",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Автономна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Анализа и дизајн на ИС",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во паметни градови",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во препознавање на облици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Иновации во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет на нештата",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредна интеракција човек компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Пресметување во облак",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмирање на видео игри",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмски парадигми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Системи за поддршка при одлучувањето",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтвер за вградливи системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирани мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Социјални мрежи и медиуми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Биолошки инспирирано пресметување",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб пребарувачки системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во когнитивни науки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "ИКТ за развој",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска анимација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Моделирање и менаџирање на бизнис процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Модерни трендови во роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Складови на податоци и аналитичка обработка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Софтверско инженерство и информациски системи",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Бизнис и менаџмент",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во компјутерските науки",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Професионални вештини",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Структурно програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Архитектура и организација на компјутери",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Дискретна математика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно ориентирана анализа и дизајн",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Објектно-ориентирано програмирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Спорт и здравје",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Калкулус 2",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски компоненти",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Креативни вештини за решавање проблеми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Маркетинг",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на сајбер безбедноста",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Алгоритми и податочни структури",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Веројатност и статистика",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Компјутерски мрежи и безбедност",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Економија за ИКТ инженери",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Инженерска математика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет програмирање на клиентска страна",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Управување со техничката поддршка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Шаблони за дизајн на кориснички интерфејси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Анализа на софтверските барања",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Оперативни системи",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Безжични и мобилни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вештачка интелигенција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во екоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во случајни процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитално процесирање на слика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн на алгоритми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Е-влада",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електрични кола",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет технологии",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска графика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Концепти на информатичко општество",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Медиуми и комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Теорија на информации со дигитални комуникации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Бази на податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Вовед во науката за податоци",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дизајн и архитектура на софтвер",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Администрација на системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Визуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Информациска безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска етика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерски звук, говор и музика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Линеарна алгебра и примени",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напреден веб дизајн",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Основи на роботиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дизајн на интеракцијата човек-компјутер",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интегрирани системи",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски квалитет и тестирање",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Агентно-базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Безжични мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вградливи микропроцесорски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелизација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во мрежна наука",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Географски информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална форензика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Електронска и мобилна трговија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Континуирана интеграција и испорака",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинско учење",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мултимедиски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Паралелно програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Податочно рударство",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Процесирање на сигналите",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Сервисно ориентирани архитектури",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирана безбедност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Статистичко моделирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Формални јазици и автомати",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Тимски проект",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Автономна роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Администрација на бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Анализа и дизајн на ИС",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб базирани системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во биоинформатиката",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во паметни градови",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во препознавање на облици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Дигитална постпродукција",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Имплементација на системи со слободен и отворен код",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Иновации во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интернет на нештата",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Машинска визија",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Менаџмент информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Методологија на истражувањето во ИКТ",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни платформи и програмирање",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредна интеракција човек компјутер",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Обработка на природните јазици",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Операциони истражувања",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Пресметување во облак",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмирање на видео игри",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Програмски парадигми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Рударење на масивни податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Системи за поддршка при одлучувањето",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтвер за вградливи системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Софтверски дефинирани мрежи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Социјални мрежи и медиуми",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Дипломска работа",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Управување со ИКТ проекти",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Биолошки инспирирано пресметување",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Блоковски вериги и криптовалути",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Веб пребарувачки системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Виртуелна реалност",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Вовед во когнитивни науки",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "ИКТ за развој",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни информациски системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Интелигентни системи",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Компјутерска анимација",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Мобилни апликации",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Моделирање и менаџирање на бизнис процеси",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Модерни трендови во роботика",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Напредни бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Неструктурирани бази на податоци",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Претприемништво",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Складови на податоци и аналитичка обработка",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Споделување и пресметување во толпа",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  },
-  {
-    "major": "Software engineering and information systems",
-    "curriculum": [
-      {
-        "semester": 1,
-        "slots": 5,
-        "electiveSlots": 0,
-        "electiveSlotsThreeYear": 0,
-        "subjects": [
-          {
-            "subject": "Business and Management",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Calculus",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Introduction to Computer Science",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Professional skills",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Structural programming",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          }
-        ]
-      },
-      {
-        "semester": 2,
-        "slots": 6,
-        "electiveSlots": 1,
-        "electiveSlotsThreeYear": 1,
-        "subjects": [
-          {
-            "subject": "Computer Architecture and Organization",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Discrete Mathematics",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Object Oriented Analysis and Design",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Object oriented programming",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Sport and health",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Calculus 2",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Computer Components",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Cybersecurity for Beginners",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Fundamentals of web design",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Marketing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Puzzle based learning",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 3,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Algorithms and Data Structures",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Computer Networks and Security",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Probability and statistics",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Advanced programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Client side Inernet programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Economy for ICT engineers",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "User interfaces design patterns",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "User support",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Еngineering mathematics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 4,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Operating systems",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Software requirements analysis",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Algorithm design",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Artificial Intelligence",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Computer graphics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Concepts of Information Society",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Digital image processing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "E-government",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Electric Circuits",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Information theory and digital communications",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Internet technologies",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Ecoinformatics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Stochastic Processes",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Media and Communications",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Visual programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Wireless mobile systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 5,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Databases",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Introduction to Data Science",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Software Design and Architecture",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Advanced Web Design",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Computer audio, speech and music",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Computer ethics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Information security",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to robotics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Linear algebra and applications",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Multimedia Networks",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "System administration",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Visualization",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Web Programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 6,
-        "slots": 5,
-        "electiveSlots": 2,
-        "electiveSlotsThreeYear": 2,
-        "subjects": [
-          {
-            "subject": "Human-computer interaction design",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Integrated Systems",
-            "mandatory": true,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Software quality and testing",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Agent-based systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Data mining",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "DevOps",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Digital Forensics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Electronic and Mobile Commerce",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Embedded microprocessor systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Formal languages and automata",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Geographic Information Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to network science",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Machine learning",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Multimedia systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Parallel programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Service Oriented Architectures",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Signal processing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Software defined security",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Statistical modelling",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Virtualization",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Wireless Multimedia Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 7,
-        "slots": 5,
-        "electiveSlots": 4,
-        "electiveSlotsThreeYear": 4,
-        "subjects": [
-          {
-            "subject": "Team project",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Advanced Human Computer Interaction",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Autonomous robotics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Cloud computing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Database administration",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Decision support systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Digital Post-production",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Implementation of Free and Open Source Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Information Systems Analysis and Design",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Innovation in ICT",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Bioinformatics",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Pattern Recognition",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Smart Cities",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "IoT",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Machine Vision",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Management Information Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Mining Massive Data Sets",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Mobile Information Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Mobile platforms and programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Natural language processing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Operations research",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Research methodology in ICT",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Social media networks",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Software defined networks",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Software for embedded systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Video games programming",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Web Based Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      },
-      {
-        "semester": 8,
-        "slots": 5,
-        "electiveSlots": 3,
-        "electiveSlotsThreeYear": 3,
-        "subjects": [
-          {
-            "subject": "Diploma thesis",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "ICT Project Management",
-            "mandatory": true,
-            "mandatoryThreeYear": true
-          },
-          {
-            "subject": "Advanced Databases",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Biology inspired computing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Blockchain and cryptocurrencies",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Business process modeling and management",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Computer Animation",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Crowd-sourcing and human computing",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Data Warehouses and OLAP",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Entrepreneurship",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "ICT for Development",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Intelligent Information Systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Intelligent systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Intelligent systems",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Introduction to Computer Science",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Mobile Applications",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Modern robotics trends",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Non-relational databases",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Virtual reality",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          },
-          {
-            "subject": "Web search engines",
-            "mandatory": false,
-            "mandatoryThreeYear": false
-          }
-        ]
-      }
-    ]
-  }
-]
Index: orage/finki_subjects/pit_only_fixed_subjects.json
===================================================================
--- storage/finki_subjects/pit_only_fixed_subjects.json	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,1338 +1,0 @@
-[
-    {
-        "subject_file": "pdfs/programski_paradigmi.pdf",
-        "name": "Програмски парадигми",
-        "code": "F18L3W038",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mashinska_vizija.pdf",
-        "name": "Машинска визија",
-        "code": "F18L3W123",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дигитално процесирање на слика",
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_grafika.pdf",
-        "name": "Компјутерска графика",
-        "code": "F18L2S114",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ],
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/geografski_informaciski_sistemi.pdf",
-        "name": "Географски информациски системи",
-        "code": "F18L3S091",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/biznis_i_menadzhment.pdf",
-        "name": "Бизнис и менаџмент",
-        "code": "F18L1W005",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/inteligentni_sistemi.pdf",
-        "name": "Интелигентни системи",
-        "code": "F18L3S107",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/avtonomna_robotika.pdf",
-        "name": "Автономна роботика",
-        "code": "F18L3W072",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napreden_veb_dizajn_0.pdf",
-        "name": "Напреден веб дизајн",
-        "code": "F18L3W136",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Основи на веб дизајн"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/digitizacija.pdf",
-        "name": "Дигитизација",
-        "code": "F18L2W096",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/programiranje_na_video_igri.pdf",
-        "name": "Програмирање на видео игри",
-        "code": "F18L3W152",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_definirana_bezbednost.pdf",
-        "name": "Софтверски дефинирана безбедност",
-        "code": "F18L3S159",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Информациска безбедност",
-                "Мрежна безбедност"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/pretpriemnishtvo.pdf",
-        "name": "Претприемништво",
-        "code": "F18L3S028",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/elektronska_i_mobilna_trgovija.pdf",
-        "name": "Електронска и мобилна трговија",
-        "code": "F18L3S025",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/administracija_na_bazi_na_podatoci.pdf",
-        "name": "Администрација на бази на податоци",
-        "code": "F18L3W074",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/biznis_statistika.pdf",
-        "name": "Бизнис статистика",
-        "code": "F18L1S023",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/veb_bazirani_sistemi.pdf",
-        "name": "Веб базирани системи",
-        "code": "F18L3W079",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_definirani_mrezhi.pdf",
-        "name": "Софтверски дефинирани мрежи",
-        "code": "F18L3W160",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/operativni_sistemi.pdf",
-        "name": "Оперативни системи",
-        "code": "F18L2S017",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/virtuelizacija.pdf",
-        "name": "Виртуелизација",
-        "code": "F18L3S062",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ikt_za_razvoj.pdf",
-        "name": "ИКТ за развој",
-        "code": "F18L3S102",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_mrezhna_nauka.pdf",
-        "name": "Вовед во мрежна наука",
-        "code": "F18L3S087",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теорија на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobilni_platformi_i_programiranje.pdf",
-        "name": "Мобилни платформи и програмирање",
-        "code": "F18L3W129",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/blokovski_verigi_i_kriptovaluti.pdf",
-        "name": "Блоковски вериги  и кри птовалути",
-        "code": "F18L3S121",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Криптографија",
-                "Информациска безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_bioinformatikata.pdf",
-        "name": "Вовед во биоинформатиката",
-        "code": "F18L3W085",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење",
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_animacija.pdf",
-        "name": "Компјутерска анимација",
-        "code": "F18L3S113",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_veb_dizajn.pdf",
-        "name": "Основи на веб дизајн",
-        "code": "F18L1S146",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/kalkulus.pdf",
-        "name": "Калкулус",
-        "code": "F18L1S013",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/kontinuirana_integracija_i_isporaka.pdf",
-        "name": "Континуирана интеграција и испорака",
-        "code": "F18L3S118",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mashinsko_uchenje.pdf",
-        "name": "Машинско учење",
-        "code": "F18L3S036",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/presmetuvanje_vo_oblak.pdf",
-        "name": "Пресметување во облак",
-        "code": "F18L3W068",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Виртуелизација"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_kompjuterskite_nauki.pdf",
-        "name": "Вовед во компјутерските науки",
-        "code": "F18L1W007",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/modeliranje_i_menadzhiranje_na_biznis_procesi.pdf",
-        "name": "Моделирање и менаџирање на бизнис процеси",
-        "code": "F18L3S130",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ],
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mobilni_aplikacii.pdf",
-        "name": "Мобилни апликации",
-        "code": "F18L3S127",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/veb_programiranje.pdf",
-        "name": "Веб програмирање",
-        "code": "F18L3W024",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softver_za_vgradlivi_sistemi.pdf",
-        "name": "Софтвер за вградливи системи",
-        "code": "F18L3W048",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/nestrukturirani_bazi_na_podatoci.pdf",
-        "name": "Неструктурирани бази на податоци",
-        "code": "F18L3S141",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/administracija_na_sistemi.pdf",
-        "name": "Администрација на системи",
-        "code": "F18L3W060",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/arhitektura_i_organizacija_na_kompjuteri.pdf",
-        "name": "Архитектура и организација на компјутери",
-        "code": "F18L1S003",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/digitalna_postprodukcija.pdf",
-        "name": "Дигитална постпродукција",
-        "code": "F18L3W092",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерска графика",
-                "Дигитално процесирање на слика"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/socijalni_mrezhi_i_mediumi.pdf",
-        "name": "Социјални мрежи и медиуми",
-        "code": "F18L3W161",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во мрежна наука"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_naukata_za_podatoci.pdf",
-        "name": "Вовед во науката за податоци",
-        "code": "F18L3W008",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис статистика",
-                "Веројатност и статистика",
-                "Основи на теорија на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/analiza_i_dizajn_na_is.pdf",
-        "name": "Анализа и дизајн на ИС",
-        "code": "F18L3W075",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/inovacii_vo_ikt.pdf",
-        "name": "Иновации во ИКТ",
-        "code": "F18L3W105",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_kognitivni_nauki.pdf",
-        "name": "Вовед во когнитивни науки",
-        "code": "F18L3S086",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција",
-                "Вовед во науката за податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kreativni_veshtini_za_reshavanje_problemi.pdf",
-        "name": "Креативни вештини за решавање проблеми",
-        "code": "F18L1S120",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/veb_prebaruvachki_sistemi.pdf",
-        "name": "Веб пребарувачки системи",
-        "code": "F18L3S080",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Обработка на природните јазици"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/bazi_na_podatoci.pdf",
-        "name": "Бази на податоци",
-        "code": "F18L3W004",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_algoritmi.pdf",
-        "name": "Дизајн на алгоритми",
-        "code": "F18L2S097",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/agentno-bazirani_sistemi.pdf",
-        "name": "Агентно-базирани системи",
-        "code": "F18L3S073",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napredni_bazi_na_podatoci.pdf",
-        "name": "Напредни бази на податоци",
-        "code": "F18L3S138",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_na_neshtata.pdf",
-        "name": "Интернет на нештата",
-        "code": "F18L3W108",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вградливи микропроцесорски системи"
-            ],
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/servisno_orientirani_arhitekturi.pdf",
-        "name": "Сервисно ориентирани архитектури",
-        "code": "F18L3S155",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/vgradlivi_mikroprocesorski_sistemi.pdf",
-        "name": "Вградливи микропроцесорски системи",
-        "code": "F18L3S040",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери",
-                "Компјутерски архитектури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/vizuelizacija.pdf",
-        "name": "Визуелизација",
-        "code": "F18L3W081",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/podatochno_rudarstvo.pdf",
-        "name": "Податочно рударство",
-        "code": "F18L3S150",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Бизнис статистика",
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/algoritmi_i_podatochni_strukturi.pdf",
-        "name": "Алгоритми и податочни структури",
-        "code": "F18L2W001",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/metodologija_na_istrazhuvanjeto_vo_ikt.pdf",
-        "name": "Методологија на истражувањето во ИКТ",
-        "code": "F18L3W126",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/elektrichni_kola.pdf",
-        "name": "Електрични кола",
-        "code": "F18L2S042",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/implementacija_na_sistemi_so_sloboden_i_otvoren_kod.pdf",
-        "name": "Имплементација на системи со слободен и отворен код",
-        "code": "F18L3W103",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/diskretna_matematika.pdf",
-        "name": "Дискретна математика",
-        "code": "F18L1W011",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/objektno_orientirana_analiza_i_dizajn.pdf",
-        "name": "Објектно ориентирана анализа и дизајн",
-        "code": "F18L1S015",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/objektno-orientirano_programiranje.pdf",
-        "name": "Објектно-ориентирано програмирање",
-        "code": "F18L1S016",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/mobilni_informaciski_sistemi.pdf",
-        "name": "Мобилни информациски системи",
-        "code": "F18L3W128",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/integrirani_sistemi.pdf",
-        "name": "Интегрирани системи",
-        "code": "F18L3S012",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Анализа и дизајн на софтверски барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_pametni_gradovi.pdf",
-        "name": "Вовед во паметни градови",
-        "code": "F18L3W088",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_i_arhitektura_na_softver.pdf",
-        "name": "Дизајн и архитектура на софтвер",
-        "code": "F18L3W009",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Анализа на софтверските барања",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/analiza_na_softverskite_baranja.pdf",
-        "name": "Анализа на софтверските барања",
-        "code": "F18L2S002",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно ориентирана анализа и дизајн",
-                "Софтверско инженерство"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/e-vlada.pdf",
-        "name": "Е-влада",
-        "code": "F18L2S099",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/spodeluvanje_i_presmetuvanje_vo_tolpa.pdf",
-        "name": "Споделување и пресметување во толпа",
-        "code": "F18L3S162",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/sistemi_za_poddrshka_pri_odluchuvanjeto.pdf",
-        "name": "Системи за поддршка при одлучувањето",
-        "code": "F18L3W156",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вештачка интелигенција",
-                "Вовед во науката за податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/profesionalni_veshtini.pdf",
-        "name": "Професионални вештини",
-        "code": "F18L1W018",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/vizuelno_programiranje.pdf",
-        "name": "Визуелно програмирање",
-        "code": "F18L2S082",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterska_etika.pdf",
-        "name": "Компјутерска етика",
-        "code": "F18L3W053",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Напредно програмирање",
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_mrezhi_i_bezbednost.pdf",
-        "name": "Компјутерски мрежи и безбедност",
-        "code": "F18L2W014",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Архитектура и организација на компјутери"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softverski_kvalitet_i_testiranje.pdf",
-        "name": "Софтверски квалитет и тестирање",
-        "code": "F18L3S019",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Дизајн и архитектура на софтвер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/veshtachka_inteligencija.pdf",
-        "name": "Вештачка интелигенција",
-        "code": "F18L2S030",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_ekoinformatikata.pdf",
-        "name": "Вовед во екоинформатиката",
-        "code": "F18L2S084",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/skladovi_na_podatoci_i_analitichka_obrabotka.pdf",
-        "name": "Складови на податоци и аналитичка обработка",
-        "code": "F18L3S157",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бази на податоци"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/ekonomija_za_ikt_inzheneri.pdf",
-        "name": "Економија за ИКТ инженери",
-        "code": "F18L2S100",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Бизнис и менаџмент"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/dizajn_na_interakcijata_chovek-kompjuter.pdf",
-        "name": "Дизајн на интеракцијата човек-компјутер",
-        "code": "F18L3S010",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimediski_sistemi.pdf",
-        "name": "Мултимедиски системи",
-        "code": "F18L3S135",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/shabloni_za_dizajn_na_korisnichki_interfejsi.pdf",
-        "name": "Шаблони за дизајн на кориснички интерфејси",
-        "code": "F18L2W167",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/napredna_interakcija_chovek_kompjuter.pdf",
-        "name": "Напредна интеракција човек компјутер",
-        "code": "F18L3W137",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дизајн на интеракцијата човек-компјутер"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/mediumi_i_komunikacii.pdf",
-        "name": "Медиуми и комуникации",
-        "code": "F18L2S124",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/upravuvanje_so_tehnichkata_poddrshka.pdf",
-        "name": "Управување со техничката поддршка",
-        "code": "F18L2W165",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/menadzhment_informaciski_sistemi.pdf",
-        "name": "Менаџмент информациски системи",
-        "code": "F18L3W027",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/moderni_trendovi_vo_robotika.pdf",
-        "name": "Модерни трендови во роботика",
-        "code": "F18L3S132",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Автономна роботика",
-                "Процесна роботика",
-                "Машинско учење"
-            ],
-            [
-                "Основи на роботиката"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/koncepti_na_informatichko_opshtestvo.pdf",
-        "name": "Концепти на информатичко општество",
-        "code": "F18L2S119",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Вовед во компјутерските науки"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/voved_vo_prepoznavanje_na_oblici.pdf",
-        "name": "Вовед во препознавање на облици",
-        "code": "F18L3W089",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/timski_proekt.pdf",
-        "name": "Тимски проект",
-        "code": "F18L3W021",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "освоени минимум 150 кредити"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/multimediski_mrezhi.pdf",
-        "name": "Мултимедиски мрежи",
-        "code": "F18L3W134",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/inteligentni_informaciski_sistemi.pdf",
-        "name": "Интелигентни информациски системи",
-        "code": "F18L3S106",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Машинско учење"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/bezzhichni_i_mobilni_sistemi.pdf",
-        "name": "Безжични и мобилни системи",
-        "code": "F18L2S061",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Компјутерски мрежи",
-                "Компјутерски мрежи и безбедност"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_programiranje_na_klientska_strana.pdf",
-        "name": "Интернет програмирање на клиентска страна",
-        "code": "F18L2W109",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/internet_tehnologii.pdf",
-        "name": "Интернет технологии",
-        "code": "F18L2S110",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/marketing.pdf",
-        "name": "Маркетинг",
-        "code": "F18L1S026",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/informaciska_bezbednost.pdf",
-        "name": "Информациска безбедност",
-        "code": "F18L3W043",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Оперативни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/linearna_algebra_i_primeni.pdf",
-        "name": "Линеарна алгебра и примени",
-        "code": "F18L3W035",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Дискретна математика",
-                "Дискретни структури 2"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/upravuvanje_so_ikt_proekti.pdf",
-        "name": "Управување со ИКТ проекти",
-        "code": "F18L3S022",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Софтверско инженерство",
-                "Анализа на софтверските барања"
-            ],
-            [
-                "Веб програмирање",
-                "Интернет технологии",
-                "Имплементација на системи со слободен и отворен код"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/strukturno_programiranje.pdf",
-        "name": "Структурно програмирање",
-        "code": "F18L1W020",
-        "level": 1,
-        "semester": "Зимски",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/napredno_programiranje.pdf",
-        "name": "Напредно програмирање",
-        "code": "F18L2W140",
-        "level": 2,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_komponenti.pdf",
-        "name": "Компјутерски компоненти",
-        "code": "F18L1S116",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/bezzhichni_multimediski_sistemi.pdf",
-        "name": "Безжични мултимедиски системи",
-        "code": "F18L3S077",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Безжични и мобилни системи"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/osnovi_na_robotikata.pdf",
-        "name": "Основи на роботиката",
-        "code": "F18L3W148",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/softversko_inzhenerstvo.pdf",
-        "name": "Софтверско инженерство",
-        "code": "F18L2S029",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Објектно-ориентирано програмирање"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/bioloshki_inspirirano_presmetuvanje.pdf",
-        "name": "Биолошки инспирирано пресметување",
-        "code": "F18L3S078",
-        "level": 3,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ],
-            [
-                "Вештачка интелигенција"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kompjuterski_zvuk_govor_i_muzika.pdf",
-        "name": "Компјутерски звук, говор и музика",
-        "code": "F18L3W115",
-        "level": 3,
-        "semester": "Зимски",
-        "prerequisites": [
-            [
-                "Алгоритми и податочни структури"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/it_sistemi_za_uchenje.pdf",
-        "name": "ИТ системи за учење",
-        "code": "F18L1S052",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    },
-    {
-        "subject_file": "pdfs/voved_vo_sluchajni_procesi.pdf",
-        "name": "Вовед во случајни процеси",
-        "code": "F18L2S090",
-        "level": 2,
-        "semester": "Летен",
-        "prerequisites": [
-            [
-                "Веројатност и статистика",
-                "Основи на теорија на информации"
-            ]
-        ]
-    },
-    {
-        "subject_file": "pdfs/kalkulus_2.pdf",
-        "name": "Калкулус 2",
-        "code": "F18L1S034",
-        "level": 1,
-        "semester": "Летен",
-        "prerequisites": []
-    }
-]
Index: ilwind.config.js
===================================================================
--- tailwind.config.js	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,21 +1,0 @@
-import defaultTheme from 'tailwindcss/defaultTheme';
-import forms from '@tailwindcss/forms';
-
-/** @type {import('tailwindcss').Config} */
-export default {
-    content: [
-        './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
-        './storage/framework/views/*.php',
-        './resources/views/**/*.blade.php',
-    ],
-
-    theme: {
-        extend: {
-            fontFamily: {
-                sans: ['Figtree', ...defaultTheme.fontFamily.sans],
-            },
-        },
-    },
-
-    plugins: [forms],
-};
Index: tests/Feature/Auth/AuthenticationTest.php
===================================================================
--- tests/Feature/Auth/AuthenticationTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/Auth/AuthenticationTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,54 +1,41 @@
 <?php
 
-namespace Tests\Feature\Auth;
+use App\Models\User;
 
-use App\Models\User;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
+test('login screen can be rendered', function () {
+    $response = $this->get('/login');
 
-class AuthenticationTest extends TestCase
-{
-    use RefreshDatabase;
+    $response->assertStatus(200);
+});
 
-    public function test_login_screen_can_be_rendered(): void
-    {
-        $response = $this->get('/login');
+test('users can authenticate using the login screen', function () {
+    $user = User::factory()->create();
 
-        $response->assertStatus(200);
-    }
+    $response = $this->post('/login', [
+        'email' => $user->email,
+        'password' => 'password',
+    ]);
 
-    public function test_users_can_authenticate_using_the_login_screen(): void
-    {
-        $user = User::factory()->create();
+    $this->assertAuthenticated();
+    $response->assertRedirect(route('dashboard', absolute: false));
+});
 
-        $response = $this->post('/login', [
-            'email' => $user->email,
-            'password' => 'password',
-        ]);
+test('users can not authenticate with invalid password', function () {
+    $user = User::factory()->create();
 
-        $this->assertAuthenticated();
-        $response->assertRedirect(route('dashboard', absolute: false));
-    }
+    $this->post('/login', [
+        'email' => $user->email,
+        'password' => 'wrong-password',
+    ]);
 
-    public function test_users_can_not_authenticate_with_invalid_password(): void
-    {
-        $user = User::factory()->create();
+    $this->assertGuest();
+});
 
-        $this->post('/login', [
-            'email' => $user->email,
-            'password' => 'wrong-password',
-        ]);
+test('users can logout', function () {
+    $user = User::factory()->create();
 
-        $this->assertGuest();
-    }
+    $response = $this->actingAs($user)->post('/logout');
 
-    public function test_users_can_logout(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this->actingAs($user)->post('/logout');
-
-        $this->assertGuest();
-        $response->assertRedirect('/');
-    }
-}
+    $this->assertGuest();
+    $response->assertRedirect('/');
+});
Index: tests/Feature/Auth/EmailVerificationTest.php
===================================================================
--- tests/Feature/Auth/EmailVerificationTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/Auth/EmailVerificationTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,58 +1,46 @@
 <?php
-
-namespace Tests\Feature\Auth;
 
 use App\Models\User;
 use Illuminate\Auth\Events\Verified;
-use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Support\Facades\Event;
 use Illuminate\Support\Facades\URL;
-use Tests\TestCase;
 
-class EmailVerificationTest extends TestCase
-{
-    use RefreshDatabase;
+test('email verification screen can be rendered', function () {
+    $user = User::factory()->unverified()->create();
 
-    public function test_email_verification_screen_can_be_rendered(): void
-    {
-        $user = User::factory()->unverified()->create();
+    $response = $this->actingAs($user)->get('/verify-email');
 
-        $response = $this->actingAs($user)->get('/verify-email');
+    $response->assertStatus(200);
+});
 
-        $response->assertStatus(200);
-    }
+test('email can be verified', function () {
+    $user = User::factory()->unverified()->create();
 
-    public function test_email_can_be_verified(): void
-    {
-        $user = User::factory()->unverified()->create();
+    Event::fake();
 
-        Event::fake();
+    $verificationUrl = URL::temporarySignedRoute(
+        'verification.verify',
+        now()->addMinutes(60),
+        ['id' => $user->id, 'hash' => sha1($user->email)]
+    );
 
-        $verificationUrl = URL::temporarySignedRoute(
-            'verification.verify',
-            now()->addMinutes(60),
-            ['id' => $user->id, 'hash' => sha1($user->email)]
-        );
+    $response = $this->actingAs($user)->get($verificationUrl);
 
-        $response = $this->actingAs($user)->get($verificationUrl);
+    Event::assertDispatched(Verified::class);
+    expect($user->fresh()->hasVerifiedEmail())->toBeTrue();
+    $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
+});
 
-        Event::assertDispatched(Verified::class);
-        $this->assertTrue($user->fresh()->hasVerifiedEmail());
-        $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
-    }
+test('email is not verified with invalid hash', function () {
+    $user = User::factory()->unverified()->create();
 
-    public function test_email_is_not_verified_with_invalid_hash(): void
-    {
-        $user = User::factory()->unverified()->create();
+    $verificationUrl = URL::temporarySignedRoute(
+        'verification.verify',
+        now()->addMinutes(60),
+        ['id' => $user->id, 'hash' => sha1('wrong-email')]
+    );
 
-        $verificationUrl = URL::temporarySignedRoute(
-            'verification.verify',
-            now()->addMinutes(60),
-            ['id' => $user->id, 'hash' => sha1('wrong-email')]
-        );
+    $this->actingAs($user)->get($verificationUrl);
 
-        $this->actingAs($user)->get($verificationUrl);
-
-        $this->assertFalse($user->fresh()->hasVerifiedEmail());
-    }
-}
+    expect($user->fresh()->hasVerifiedEmail())->toBeFalse();
+});
Index: tests/Feature/Auth/PasswordConfirmationTest.php
===================================================================
--- tests/Feature/Auth/PasswordConfirmationTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/Auth/PasswordConfirmationTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,44 +1,32 @@
 <?php
 
-namespace Tests\Feature\Auth;
+use App\Models\User;
 
-use App\Models\User;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
+test('confirm password screen can be rendered', function () {
+    $user = User::factory()->create();
 
-class PasswordConfirmationTest extends TestCase
-{
-    use RefreshDatabase;
+    $response = $this->actingAs($user)->get('/confirm-password');
 
-    public function test_confirm_password_screen_can_be_rendered(): void
-    {
-        $user = User::factory()->create();
+    $response->assertStatus(200);
+});
 
-        $response = $this->actingAs($user)->get('/confirm-password');
+test('password can be confirmed', function () {
+    $user = User::factory()->create();
 
-        $response->assertStatus(200);
-    }
+    $response = $this->actingAs($user)->post('/confirm-password', [
+        'password' => 'password',
+    ]);
 
-    public function test_password_can_be_confirmed(): void
-    {
-        $user = User::factory()->create();
+    $response->assertRedirect();
+    $response->assertSessionHasNoErrors();
+});
 
-        $response = $this->actingAs($user)->post('/confirm-password', [
-            'password' => 'password',
-        ]);
+test('password is not confirmed with invalid password', function () {
+    $user = User::factory()->create();
 
-        $response->assertRedirect();
-        $response->assertSessionHasNoErrors();
-    }
+    $response = $this->actingAs($user)->post('/confirm-password', [
+        'password' => 'wrong-password',
+    ]);
 
-    public function test_password_is_not_confirmed_with_invalid_password(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this->actingAs($user)->post('/confirm-password', [
-            'password' => 'wrong-password',
-        ]);
-
-        $response->assertSessionHasErrors();
-    }
-}
+    $response->assertSessionHasErrors();
+});
Index: tests/Feature/Auth/PasswordResetTest.php
===================================================================
--- tests/Feature/Auth/PasswordResetTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/Auth/PasswordResetTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,73 +1,60 @@
 <?php
-
-namespace Tests\Feature\Auth;
 
 use App\Models\User;
 use Illuminate\Auth\Notifications\ResetPassword;
-use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Support\Facades\Notification;
-use Tests\TestCase;
 
-class PasswordResetTest extends TestCase
-{
-    use RefreshDatabase;
+test('reset password link screen can be rendered', function () {
+    $response = $this->get('/forgot-password');
 
-    public function test_reset_password_link_screen_can_be_rendered(): void
-    {
-        $response = $this->get('/forgot-password');
+    $response->assertStatus(200);
+});
+
+test('reset password link can be requested', function () {
+    Notification::fake();
+
+    $user = User::factory()->create();
+
+    $this->post('/forgot-password', ['email' => $user->email]);
+
+    Notification::assertSentTo($user, ResetPassword::class);
+});
+
+test('reset password screen can be rendered', function () {
+    Notification::fake();
+
+    $user = User::factory()->create();
+
+    $this->post('/forgot-password', ['email' => $user->email]);
+
+    Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
+        $response = $this->get('/reset-password/'.$notification->token);
 
         $response->assertStatus(200);
-    }
 
-    public function test_reset_password_link_can_be_requested(): void
-    {
-        Notification::fake();
+        return true;
+    });
+});
 
-        $user = User::factory()->create();
+test('password can be reset with valid token', function () {
+    Notification::fake();
 
-        $this->post('/forgot-password', ['email' => $user->email]);
+    $user = User::factory()->create();
 
-        Notification::assertSentTo($user, ResetPassword::class);
-    }
+    $this->post('/forgot-password', ['email' => $user->email]);
 
-    public function test_reset_password_screen_can_be_rendered(): void
-    {
-        Notification::fake();
+    Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
+        $response = $this->post('/reset-password', [
+            'token' => $notification->token,
+            'email' => $user->email,
+            'password' => 'password',
+            'password_confirmation' => 'password',
+        ]);
 
-        $user = User::factory()->create();
+        $response
+            ->assertSessionHasNoErrors()
+            ->assertRedirect(route('login'));
 
-        $this->post('/forgot-password', ['email' => $user->email]);
-
-        Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
-            $response = $this->get('/reset-password/'.$notification->token);
-
-            $response->assertStatus(200);
-
-            return true;
-        });
-    }
-
-    public function test_password_can_be_reset_with_valid_token(): void
-    {
-        Notification::fake();
-
-        $user = User::factory()->create();
-
-        $this->post('/forgot-password', ['email' => $user->email]);
-
-        Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
-            $response = $this->post('/reset-password', [
-                'token' => $notification->token,
-                'email' => $user->email,
-                'password' => 'password',
-                'password_confirmation' => 'password',
-            ]);
-
-            $response
-                ->assertSessionHasNoErrors()
-                ->assertRedirect(route('login'));
-
-            return true;
-        });
-    }
-}
+        return true;
+    });
+});
Index: sts/Feature/Auth/PasswordUpdateTest.php
===================================================================
--- tests/Feature/Auth/PasswordUpdateTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,51 +1,0 @@
-<?php
-
-namespace Tests\Feature\Auth;
-
-use App\Models\User;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Support\Facades\Hash;
-use Tests\TestCase;
-
-class PasswordUpdateTest extends TestCase
-{
-    use RefreshDatabase;
-
-    public function test_password_can_be_updated(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->from('/profile')
-            ->put('/password', [
-                'current_password' => 'password',
-                'password' => 'new-password',
-                'password_confirmation' => 'new-password',
-            ]);
-
-        $response
-            ->assertSessionHasNoErrors()
-            ->assertRedirect('/profile');
-
-        $this->assertTrue(Hash::check('new-password', $user->refresh()->password));
-    }
-
-    public function test_correct_password_must_be_provided_to_update_password(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->from('/profile')
-            ->put('/password', [
-                'current_password' => 'wrong-password',
-                'password' => 'new-password',
-                'password_confirmation' => 'new-password',
-            ]);
-
-        $response
-            ->assertSessionHasErrorsIn('updatePassword', 'current_password')
-            ->assertRedirect('/profile');
-    }
-}
Index: tests/Feature/Auth/RegistrationTest.php
===================================================================
--- tests/Feature/Auth/RegistrationTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/Auth/RegistrationTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,31 +1,19 @@
 <?php
 
-namespace Tests\Feature\Auth;
+test('registration screen can be rendered', function () {
+    $response = $this->get('/register');
 
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
+    $response->assertStatus(200);
+});
 
-class RegistrationTest extends TestCase
-{
-    use RefreshDatabase;
+test('new users can register', function () {
+    $response = $this->post('/register', [
+        'name' => 'Test User',
+        'email' => 'test@example.com',
+        'password' => 'password',
+        'password_confirmation' => 'password',
+    ]);
 
-    public function test_registration_screen_can_be_rendered(): void
-    {
-        $response = $this->get('/register');
-
-        $response->assertStatus(200);
-    }
-
-    public function test_new_users_can_register(): void
-    {
-        $response = $this->post('/register', [
-            'name' => 'Test User',
-            'email' => 'test@example.com',
-            'password' => 'password',
-            'password_confirmation' => 'password',
-        ]);
-
-        $this->assertAuthenticated();
-        $response->assertRedirect(route('dashboard', absolute: false));
-    }
-}
+    $this->assertAuthenticated();
+    $response->assertRedirect(route('dashboard', absolute: false));
+});
Index: tests/Feature/DashboardTest.php
===================================================================
--- tests/Feature/DashboardTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ tests/Feature/DashboardTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,13 @@
+<?php
+
+use App\Models\User;
+
+test('guests are redirected to the login page', function () {
+    $this->get('/dashboard')->assertRedirect('/login');
+});
+
+test('authenticated users can visit the dashboard', function () {
+    $this->actingAs($user = User::factory()->create());
+
+    $this->get('/dashboard')->assertOk();
+});
Index: tests/Feature/ExampleTest.php
===================================================================
--- tests/Feature/ExampleTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Feature/ExampleTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,19 +1,7 @@
 <?php
 
-namespace Tests\Feature;
+it('returns a successful response', function () {
+    $response = $this->get('/');
 
-// use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
-
-class ExampleTest extends TestCase
-{
-    /**
-     * A basic test example.
-     */
-    public function test_the_application_returns_a_successful_response(): void
-    {
-        $response = $this->get('/');
-
-        $response->assertStatus(200);
-    }
-}
+    $response->assertStatus(200);
+});
Index: sts/Feature/ProfileTest.php
===================================================================
--- tests/Feature/ProfileTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,99 +1,0 @@
-<?php
-
-namespace Tests\Feature;
-
-use App\Models\User;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
-
-class ProfileTest extends TestCase
-{
-    use RefreshDatabase;
-
-    public function test_profile_page_is_displayed(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->get('/profile');
-
-        $response->assertOk();
-    }
-
-    public function test_profile_information_can_be_updated(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->patch('/profile', [
-                'name' => 'Test User',
-                'email' => 'test@example.com',
-            ]);
-
-        $response
-            ->assertSessionHasNoErrors()
-            ->assertRedirect('/profile');
-
-        $user->refresh();
-
-        $this->assertSame('Test User', $user->name);
-        $this->assertSame('test@example.com', $user->email);
-        $this->assertNull($user->email_verified_at);
-    }
-
-    public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->patch('/profile', [
-                'name' => 'Test User',
-                'email' => $user->email,
-            ]);
-
-        $response
-            ->assertSessionHasNoErrors()
-            ->assertRedirect('/profile');
-
-        $this->assertNotNull($user->refresh()->email_verified_at);
-    }
-
-    public function test_user_can_delete_their_account(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->delete('/profile', [
-                'password' => 'password',
-            ]);
-
-        $response
-            ->assertSessionHasNoErrors()
-            ->assertRedirect('/');
-
-        $this->assertGuest();
-        $this->assertNull($user->fresh());
-    }
-
-    public function test_correct_password_must_be_provided_to_delete_account(): void
-    {
-        $user = User::factory()->create();
-
-        $response = $this
-            ->actingAs($user)
-            ->from('/profile')
-            ->delete('/profile', [
-                'password' => 'wrong-password',
-            ]);
-
-        $response
-            ->assertSessionHasErrorsIn('userDeletion', 'password')
-            ->assertRedirect('/profile');
-
-        $this->assertNotNull($user->fresh());
-    }
-}
Index: tests/Feature/Settings/PasswordUpdateTest.php
===================================================================
--- tests/Feature/Settings/PasswordUpdateTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ tests/Feature/Settings/PasswordUpdateTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,40 @@
+<?php
+
+use App\Models\User;
+use Illuminate\Support\Facades\Hash;
+
+test('password can be updated', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->from('/settings/password')
+        ->put('/settings/password', [
+            'current_password' => 'password',
+            'password' => 'new-password',
+            'password_confirmation' => 'new-password',
+        ]);
+
+    $response
+        ->assertSessionHasNoErrors()
+        ->assertRedirect('/settings/password');
+
+    expect(Hash::check('new-password', $user->refresh()->password))->toBeTrue();
+});
+
+test('correct password must be provided to update password', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->from('/settings/password')
+        ->put('/settings/password', [
+            'current_password' => 'wrong-password',
+            'password' => 'new-password',
+            'password_confirmation' => 'new-password',
+        ]);
+
+    $response
+        ->assertSessionHasErrors('current_password')
+        ->assertRedirect('/settings/password');
+});
Index: tests/Feature/Settings/ProfileUpdateTest.php
===================================================================
--- tests/Feature/Settings/ProfileUpdateTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ tests/Feature/Settings/ProfileUpdateTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,85 @@
+<?php
+
+use App\Models\User;
+
+test('profile page is displayed', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->get('/settings/profile');
+
+    $response->assertOk();
+});
+
+test('profile information can be updated', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->patch('/settings/profile', [
+            'name' => 'Test User',
+            'email' => 'test@example.com',
+        ]);
+
+    $response
+        ->assertSessionHasNoErrors()
+        ->assertRedirect('/settings/profile');
+
+    $user->refresh();
+
+    expect($user->name)->toBe('Test User');
+    expect($user->email)->toBe('test@example.com');
+    expect($user->email_verified_at)->toBeNull();
+});
+
+test('email verification status is unchanged when the email address is unchanged', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->patch('/settings/profile', [
+            'name' => 'Test User',
+            'email' => $user->email,
+        ]);
+
+    $response
+        ->assertSessionHasNoErrors()
+        ->assertRedirect('/settings/profile');
+
+    expect($user->refresh()->email_verified_at)->not->toBeNull();
+});
+
+test('user can delete their account', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->delete('/settings/profile', [
+            'password' => 'password',
+        ]);
+
+    $response
+        ->assertSessionHasNoErrors()
+        ->assertRedirect('/');
+
+    $this->assertGuest();
+    expect($user->fresh())->toBeNull();
+});
+
+test('correct password must be provided to delete account', function () {
+    $user = User::factory()->create();
+
+    $response = $this
+        ->actingAs($user)
+        ->from('/settings/profile')
+        ->delete('/settings/profile', [
+            'password' => 'wrong-password',
+        ]);
+
+    $response
+        ->assertSessionHasErrors('password')
+        ->assertRedirect('/settings/profile');
+
+    expect($user->fresh())->not->toBeNull();
+});
Index: tests/Pest.php
===================================================================
--- tests/Pest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ tests/Pest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,47 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Test Case
+|--------------------------------------------------------------------------
+|
+| The closure you provide to your test functions is always bound to a specific PHPUnit test
+| case class. By default, that class is "PHPUnit\Framework\TestCase". Of course, you may
+| need to change it using the "pest()" function to bind a different classes or traits.
+|
+*/
+
+pest()->extend(Tests\TestCase::class)
+    ->use(Illuminate\Foundation\Testing\RefreshDatabase::class)
+    ->in('Feature');
+
+/*
+|--------------------------------------------------------------------------
+| Expectations
+|--------------------------------------------------------------------------
+|
+| When you're writing tests, you often need to check that values meet certain conditions. The
+| "expect()" function gives you access to a set of "expectations" methods that you can use
+| to assert different things. Of course, you may extend the Expectation API at any time.
+|
+*/
+
+expect()->extend('toBeOne', function () {
+    return $this->toBe(1);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Functions
+|--------------------------------------------------------------------------
+|
+| While Pest is very powerful out-of-the-box, you may have some testing code specific to your
+| project that you don't want to repeat in every file. Here you can also expose helpers as
+| global functions to help you to reduce the number of lines of code in your test files.
+|
+*/
+
+function something()
+{
+    // ..
+}
Index: tests/Unit/ExampleTest.php
===================================================================
--- tests/Unit/ExampleTest.php	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ tests/Unit/ExampleTest.php	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -1,16 +1,5 @@
 <?php
 
-namespace Tests\Unit;
-
-use PHPUnit\Framework\TestCase;
-
-class ExampleTest extends TestCase
-{
-    /**
-     * A basic test example.
-     */
-    public function test_that_true_is_true(): void
-    {
-        $this->assertTrue(true);
-    }
-}
+test('that true is true', function () {
+    expect(true)->toBeTrue();
+});
Index: tsconfig.json
===================================================================
--- tsconfig.json	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ tsconfig.json	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,122 @@
+{
+    "compilerOptions": {
+        /* Visit https://aka.ms/tsconfig to read more about this file */
+
+        /* Projects */
+        // "incremental": true,                              /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
+        // "composite": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */
+        // "tsBuildInfoFile": "./.tsbuildinfo",              /* Specify the path to .tsbuildinfo incremental compilation file. */
+        // "disableSourceOfProjectReferenceRedirect": true,  /* Disable preferring source files instead of declaration files when referencing composite projects. */
+        // "disableSolutionSearching": true,                 /* Opt a project out of multi-project reference checking when editing. */
+        // "disableReferencedProjectLoad": true,             /* Reduce the number of projects loaded automatically by TypeScript. */
+
+        /* Language and Environment */
+        "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
+        // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+        // "jsx": "preserve",                                /* Specify what JSX code is generated. */
+        // "experimentalDecorators": true,                   /* Enable experimental support for legacy experimental decorators. */
+        // "emitDecoratorMetadata": true,                    /* Emit design-type metadata for decorated declarations in source files. */
+        // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
+        // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+        // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+        // "reactNamespace": "",                             /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
+        // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */
+        // "useDefineForClassFields": true,                  /* Emit ECMAScript-standard-compliant class fields. */
+        // "moduleDetection": "auto",                        /* Control what method is used to detect module-format JS files. */
+
+        /* Modules */
+        "module": "ESNext" /* Specify what module code is generated. */,
+        // "rootDir": "./",                                  /* Specify the root folder within your source files. */
+        "moduleResolution": "bundler" /* Specify how TypeScript looks up a file from a given module specifier. */,
+        // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */
+        // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */
+        // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */
+        // "typeRoots": [],                                  /* Specify multiple folders that act like './node_modules/@types'. */
+        // "types": [],                                      /* Specify type package names to be included without being referenced in a source file. */
+        // "allowUmdGlobalAccess": true,                     /* Allow accessing UMD globals from modules. */
+        // "moduleSuffixes": [],                             /* List of file name suffixes to search when resolving a module. */
+        // "allowImportingTsExtensions": true,               /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
+        // "rewriteRelativeImportExtensions": true,          /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
+        // "resolvePackageJsonExports": true,                /* Use the package.json 'exports' field when resolving package imports. */
+        // "resolvePackageJsonImports": true,                /* Use the package.json 'imports' field when resolving imports. */
+        // "customConditions": [],                           /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
+        // "noUncheckedSideEffectImports": true,             /* Check side effect imports. */
+        // "resolveJsonModule": true,                        /* Enable importing .json files. */
+        // "allowArbitraryExtensions": true,                 /* Enable importing files with any extension, provided a declaration file is present. */
+        // "noResolve": true,                                /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
+
+        /* JavaScript Support */
+        "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */,
+        // "checkJs": true,                                  /* Enable error reporting in type-checked JavaScript files. */
+        // "maxNodeModuleJsDepth": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+        /* Emit */
+        // "declaration": true,                              /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+        // "declarationMap": true,                           /* Create sourcemaps for d.ts files. */
+        // "emitDeclarationOnly": true,                      /* Only output d.ts files and not JavaScript files. */
+        // "sourceMap": true,                                /* Create source map files for emitted JavaScript files. */
+        // "inlineSourceMap": true,                          /* Include sourcemap files inside the emitted JavaScript. */
+        "noEmit": true /* Disable emitting files from a compilation. */,
+        // "outFile": "./",                                  /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+        // "outDir": "./",                                   /* Specify an output folder for all emitted files. */
+        // "removeComments": true,                           /* Disable emitting comments. */
+        // "importHelpers": true,                            /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+        // "downlevelIteration": true,                       /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+        // "sourceRoot": "",                                 /* Specify the root path for debuggers to find the reference source code. */
+        // "mapRoot": "",                                    /* Specify the location where debugger should locate map files instead of generated locations. */
+        // "inlineSources": true,                            /* Include source code in the sourcemaps inside the emitted JavaScript. */
+        // "emitBOM": true,                                  /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+        // "newLine": "crlf",                                /* Set the newline character for emitting files. */
+        // "stripInternal": true,                            /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+        // "noEmitHelpers": true,                            /* Disable generating custom helper functions like '__extends' in compiled output. */
+        // "noEmitOnError": true,                            /* Disable emitting files if any type checking errors are reported. */
+        // "preserveConstEnums": true,                       /* Disable erasing 'const enum' declarations in generated code. */
+        // "declarationDir": "./",                           /* Specify the output directory for generated declaration files. */
+
+        /* Interop Constraints */
+        "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */,
+        // "verbatimModuleSyntax": true,                     /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+        // "isolatedDeclarations": true,                     /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
+        // "allowSyntheticDefaultImports": true,             /* Allow 'import x from y' when a module doesn't have a default export. */
+        "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
+        // "preserveSymlinks": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+        "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
+
+        /* Type Checking */
+        "strict": true /* Enable all strict type-checking options. */,
+        "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */,
+        // "strictNullChecks": true,                         /* When type checking, take into account 'null' and 'undefined'. */
+        // "strictFunctionTypes": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+        // "strictBindCallApply": true,                      /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+        // "strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */
+        // "strictBuiltinIteratorReturn": true,              /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
+        // "noImplicitThis": true,                           /* Enable error reporting when 'this' is given the type 'any'. */
+        // "useUnknownInCatchVariables": true,               /* Default catch clause variables as 'unknown' instead of 'any'. */
+        // "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */
+        // "noUnusedLocals": true,                           /* Enable error reporting when local variables aren't read. */
+        // "noUnusedParameters": true,                       /* Raise an error when a function parameter isn't read. */
+        // "exactOptionalPropertyTypes": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */
+        // "noImplicitReturns": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */
+        // "noFallthroughCasesInSwitch": true,               /* Enable error reporting for fallthrough cases in switch statements. */
+        // "noUncheckedIndexedAccess": true,                 /* Add 'undefined' to a type when accessed using an index. */
+        // "noImplicitOverride": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */
+        // "noPropertyAccessFromIndexSignature": true,       /* Enforces using indexed accessors for keys declared using an indexed type. */
+        // "allowUnusedLabels": true,                        /* Disable error reporting for unused labels. */
+        // "allowUnreachableCode": true,                     /* Disable error reporting for unreachable code. */
+
+        /* Completeness */
+        // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */
+        "skipLibCheck": true /* Skip type checking all .d.ts files. */,
+        "baseUrl": ".",
+        "paths": {
+            "@/*": ["./resources/js/*"],
+            "ziggy-js": ["./vendor/tightenco/ziggy"]
+        },
+        "jsx": "react-jsx"
+    },
+    "include": [
+        "resources/js/**/*.ts",
+        "resources/js/**/*.d.ts",
+        "resources/js/**/*.tsx",
+    ]
+}
Index: te.config.js
===================================================================
--- vite.config.js	(revision 40400756795ba225aa7a2f5faada03f3ae93bd1c)
+++ 	(revision )
@@ -1,11 +1,0 @@
-import { defineConfig } from 'vite';
-import laravel from 'laravel-vite-plugin';
-
-export default defineConfig({
-    plugins: [
-        laravel({
-            input: ['resources/css/app.css', 'resources/js/app.js'],
-            refresh: true,
-        }),
-    ],
-});
Index: vite.config.ts
===================================================================
--- vite.config.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
+++ vite.config.ts	(revision 63ff0514a16294af838c4116931407d918364f83)
@@ -0,0 +1,25 @@
+import tailwindcss from '@tailwindcss/vite';
+import react from '@vitejs/plugin-react';
+import laravel from 'laravel-vite-plugin';
+import { resolve } from 'node:path';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+    plugins: [
+        laravel({
+            input: ['resources/css/app.css', 'resources/js/app.tsx'],
+            ssr: 'resources/js/ssr.tsx',
+            refresh: true,
+        }),
+        react(),
+        tailwindcss(),
+    ],
+    esbuild: {
+        jsx: 'automatic',
+    },
+    resolve: {
+        alias: {
+            'ziggy-js': resolve(__dirname, 'vendor/tightenco/ziggy'),
+        },
+    },
+});
